summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2023-05-05 09:29:47 +0200
committerBenjamin Otte <otte@redhat.com>2023-05-17 02:25:32 +0200
commit0e5d48ea39530188cab6c3cc6d490f7acca368b4 (patch)
tree32e18ab98373c072debdc0bf5c3fe3c6944cdc1d
parent0e71898059415fe0fd0f96bcc5c5b365c7e0ebdd (diff)
downloadgtk+-0e5d48ea39530188cab6c3cc6d490f7acca368b4.tar.gz
vulkan: Render whole texture
When the node bounds were a non-integer size, the texture would get ceil()ed pixels, but various viewport or scissor computations might floor() instead, leaving the right/bottom row of pixels untouched. Make sure those functions ceil(), too.
-rw-r--r--gsk/vulkan/gskvulkanrenderer.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gsk/vulkan/gskvulkanrenderer.c b/gsk/vulkan/gskvulkanrenderer.c
index 71ec47b543..a14e6bd373 100644
--- a/gsk/vulkan/gskvulkanrenderer.c
+++ b/gsk/vulkan/gskvulkanrenderer.c
@@ -228,6 +228,7 @@ gsk_vulkan_renderer_render_texture (GskRenderer *renderer,
GskVulkanRender *render;
GskVulkanImage *image;
GdkTexture *texture;
+ graphene_rect_t rounded_viewport;
#ifdef G_ENABLE_DEBUG
GskProfiler *profiler;
gint64 cpu_time;
@@ -244,11 +245,15 @@ gsk_vulkan_renderer_render_texture (GskRenderer *renderer,
render = gsk_vulkan_render_new (renderer, self->vulkan);
+ rounded_viewport = GRAPHENE_RECT_INIT (viewport->origin.x,
+ viewport->origin.y,
+ ceil (viewport->size.width),
+ ceil (viewport->size.height));
image = gsk_vulkan_image_new_for_framebuffer (self->vulkan,
- ceil (viewport->size.width),
- ceil (viewport->size.height));
+ rounded_viewport.size.width,
+ rounded_viewport.size.height);
- gsk_vulkan_render_reset (render, image, viewport, NULL);
+ gsk_vulkan_render_reset (render, image, &rounded_viewport, NULL);
gsk_vulkan_render_add_node (render, root);
gsk_vulkan_render_upload (render);
gsk_vulkan_render_draw (render);