From 5de6f12e88fd64f0a906f77d3431bae194a75d37 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 10 May 2023 03:17:38 +0200 Subject: [PATCH] vulkan: Pass scale to offscreens Create offscreens with enough pixels for the given scale and ensure the scale is passed on. This improves text rendering on offscreens quite a bit. --- gsk/vulkan/gskvulkanrenderpass.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/gsk/vulkan/gskvulkanrenderpass.c b/gsk/vulkan/gskvulkanrenderpass.c index a7ec60bd8b..d890c36fab 100644 --- a/gsk/vulkan/gskvulkanrenderpass.c +++ b/gsk/vulkan/gskvulkanrenderpass.c @@ -1009,21 +1009,24 @@ gsk_vulkan_render_pass_render_offscreen (GdkVulkanContext *vulkan, GskVulkanUploader *uploader, VkSemaphore semaphore, GskRenderNode *node, + const graphene_vec2_t *scale, const graphene_rect_t *viewport) { graphene_rect_t view; cairo_region_t *clip; GskVulkanRenderPass *pass; GskVulkanImage *result; + float scale_x, scale_y; + scale_x = graphene_vec2_get_x (scale); + scale_y = graphene_vec2_get_y (scale); view = GRAPHENE_RECT_INIT (viewport->origin.x, viewport->origin.y, - ceil (viewport->size.width), - ceil (viewport->size.height)); + ceil (scale_x * viewport->size.width), + ceil (scale_y * viewport->size.height)); result = gsk_vulkan_image_new_for_offscreen (vulkan, - view.size.width, - view.size.height); + view.size.width, view.size.height); #ifdef G_ENABLE_DEBUG { @@ -1042,7 +1045,7 @@ gsk_vulkan_render_pass_render_offscreen (GdkVulkanContext *vulkan, pass = gsk_vulkan_render_pass_new (vulkan, result, - graphene_vec2_one (), + scale, &view, clip, semaphore); @@ -1119,6 +1122,7 @@ gsk_vulkan_render_pass_get_node_as_texture (GskVulkanRenderPass *self, uploader, semaphore, node, + &self->scale, &clipped); } } @@ -1350,6 +1354,7 @@ gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, uploader, semaphore, child, + &self->scale, child_bounds); get_tex_rect (&op->render.source_rect, &op->render.node->bounds, child_bounds); } -- 2.30.2