diff options
author | Benjamin Otte <otte@redhat.com> | 2023-05-05 09:29:47 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2023-05-17 02:25:32 +0200 |
commit | 0e5d48ea39530188cab6c3cc6d490f7acca368b4 (patch) | |
tree | 32e18ab98373c072debdc0bf5c3fe3c6944cdc1d | |
parent | 0e71898059415fe0fd0f96bcc5c5b365c7e0ebdd (diff) | |
download | gtk+-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.c | 11 |
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); |