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:
Georges Basile Stavracas Neto
2023-11-19 14:25:16 -03:00
committed by Benjamin Otte
parent 90a278ce46
commit c2ec97e922
3 changed files with 32 additions and 5 deletions

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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