gpu/renderer: Improve scale detection
The GL branch should eventually call into gdk_gl_context_get_scale(), which is what checks for GDK_DEBUG=gl-fractional; whereas the Vulkan branch needs no change.
This commit is contained in:
committed by
Benjamin Otte
parent
90a278ce46
commit
c2ec97e922
@@ -55,11 +55,9 @@ get_render_region (GskGpuRenderer *self)
|
||||
GskGpuRendererPrivate *priv = gsk_gpu_renderer_get_instance_private (self);
|
||||
const cairo_region_t *damage;
|
||||
cairo_region_t *scaled_damage;
|
||||
GdkSurface *surface;
|
||||
double scale;
|
||||
|
||||
surface = gdk_draw_context_get_surface (priv->context);
|
||||
scale = gdk_surface_get_scale (surface);
|
||||
scale = gsk_gpu_renderer_get_scale (self);
|
||||
|
||||
damage = gdk_draw_context_get_frame_region (priv->context);
|
||||
scaled_damage = cairo_region_create ();
|
||||
@@ -360,6 +358,17 @@ gsk_gpu_renderer_render (GskRenderer *renderer,
|
||||
g_clear_pointer (&render_region, cairo_region_destroy);
|
||||
}
|
||||
|
||||
static double
|
||||
gsk_gpu_renderer_real_get_scale (GskGpuRenderer *self)
|
||||
{
|
||||
GskGpuRendererPrivate *priv = gsk_gpu_renderer_get_instance_private (self);
|
||||
GdkSurface *surface;
|
||||
|
||||
surface = gdk_draw_context_get_surface (priv->context);
|
||||
|
||||
return gdk_surface_get_scale (surface);
|
||||
}
|
||||
|
||||
static void
|
||||
gsk_gpu_renderer_class_init (GskGpuRendererClass *klass)
|
||||
{
|
||||
@@ -378,6 +387,7 @@ gsk_gpu_renderer_class_init (GskGpuRendererClass *klass)
|
||||
klass->optimizations &= ~gdk_parse_debug_var ("GSK_GPU_SKIP",
|
||||
gsk_gpu_optimization_keys,
|
||||
G_N_ELEMENTS (gsk_gpu_optimization_keys));
|
||||
klass->get_scale = gsk_gpu_renderer_real_get_scale;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -404,3 +414,8 @@ gsk_gpu_renderer_get_device (GskGpuRenderer *self)
|
||||
return priv->device;
|
||||
}
|
||||
|
||||
double
|
||||
gsk_gpu_renderer_get_scale (GskGpuRenderer *self)
|
||||
{
|
||||
return GSK_GPU_RENDERER_GET_CLASS (self)->get_scale (self);
|
||||
}
|
||||
|
||||
@@ -38,10 +38,13 @@ struct _GskGpuRendererClass
|
||||
void (* wait) (GskGpuRenderer *self,
|
||||
GskGpuFrame **frame,
|
||||
gsize n_frames);
|
||||
|
||||
double (*get_scale) (GskGpuRenderer *self);
|
||||
};
|
||||
|
||||
GdkDrawContext * gsk_gpu_renderer_get_context (GskGpuRenderer *self);
|
||||
GskGpuDevice * gsk_gpu_renderer_get_device (GskGpuRenderer *self);
|
||||
double gsk_gpu_renderer_get_scale (GskGpuRenderer *self);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
||||
@@ -73,11 +73,11 @@ gsk_ngl_renderer_get_backbuffer (GskGpuRenderer *renderer)
|
||||
GskNglRenderer *self = GSK_NGL_RENDERER (renderer);
|
||||
GdkDrawContext *context;
|
||||
GdkSurface *surface;
|
||||
float scale;
|
||||
double scale;
|
||||
|
||||
context = gsk_gpu_renderer_get_context (renderer);
|
||||
surface = gdk_draw_context_get_surface (context);
|
||||
scale = gdk_surface_get_scale (surface);
|
||||
scale = gsk_gpu_renderer_get_scale (renderer);
|
||||
|
||||
if (self->backbuffer == NULL ||
|
||||
gsk_gpu_image_get_width (self->backbuffer) != ceil (gdk_surface_get_width (surface) * scale) ||
|
||||
@@ -100,6 +100,14 @@ gsk_ngl_renderer_wait (GskGpuRenderer *self,
|
||||
{
|
||||
}
|
||||
|
||||
static double
|
||||
gsk_ngl_renderer_get_scale (GskGpuRenderer *self)
|
||||
{
|
||||
GdkDrawContext *context = gsk_gpu_renderer_get_context (self);
|
||||
|
||||
return gdk_gl_context_get_scale (GDK_GL_CONTEXT (context));
|
||||
}
|
||||
|
||||
static void
|
||||
gsk_ngl_renderer_class_init (GskNglRendererClass *klass)
|
||||
{
|
||||
@@ -112,6 +120,7 @@ gsk_ngl_renderer_class_init (GskNglRendererClass *klass)
|
||||
gpu_renderer_class->make_current = gsk_ngl_renderer_make_current;
|
||||
gpu_renderer_class->get_backbuffer = gsk_ngl_renderer_get_backbuffer;
|
||||
gpu_renderer_class->wait = gsk_ngl_renderer_wait;
|
||||
gpu_renderer_class->get_scale = gsk_ngl_renderer_get_scale;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
Reference in New Issue
Block a user