vulkan: Clear Cairo surfaces on upload
authorBenjamin Otte <otte@redhat.com>
Sun, 23 Jul 2023 16:26:52 +0000 (18:26 +0200)
committerBenjamin Otte <otte@redhat.com>
Mon, 31 Jul 2023 14:51:03 +0000 (16:51 +0200)
The memory isn't guaranteed to be all zeroes and we don't want glitches.

gsk/vulkan/gskvulkanuploadop.c

index 428590f55917d45f07b51dc25a65b20c7ca10aaf..afb0904456df43da784f7799275988b128da1b24 100644 (file)
@@ -287,6 +287,9 @@ gsk_vulkan_upload_cairo_op_draw (GskVulkanOp *op,
                                   width / self->viewport.size.width,
                                   height / self->viewport.size.height);
   cr = cairo_create (surface);
+  cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
+  cairo_paint (cr);
+  cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
   cairo_translate (cr, -self->viewport.origin.x, -self->viewport.origin.y);
 
   gsk_render_node_draw (self->node, cr);
@@ -402,6 +405,9 @@ gsk_vulkan_upload_glyph_op_draw (GskVulkanOp *op,
   cairo_surface_set_device_scale (surface, self->scale, self->scale);
 
   cr = cairo_create (surface);
+  cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
+  cairo_paint (cr);
+  cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
 
   /* Make sure the entire surface is initialized to black */
   cairo_set_source_rgba (cr, 0, 0, 0, 0);