ngl: Make render_texture high depth aware
authorMatthias Clasen <mclasen@redhat.com>
Wed, 6 Oct 2021 22:31:09 +0000 (18:31 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 7 Oct 2021 01:45:54 +0000 (21:45 -0400)
Make a deep texture, if the render nodes have
high depth content.

For now, we use 32F here for the deep format,
since using 16F causes small rounding errors
that break the memorytexture roundtrip tests.

gsk/ngl/gsknglrenderer.c

index e5aaebd0a4bd74f067fdacbbffc5a351ecd816b8..eea48b6e6d0b67577bc6b5426a29d6a64979a120 100644 (file)
@@ -241,6 +241,7 @@ gsk_ngl_renderer_render_texture (GskRenderer           *renderer,
   guint texture_id;
   int width;
   int height;
+  int format;
 
   g_assert (GSK_IS_NGL_RENDERER (renderer));
   g_assert (root != NULL);
@@ -248,9 +249,11 @@ gsk_ngl_renderer_render_texture (GskRenderer           *renderer,
   width = ceilf (viewport->size.width);
   height = ceilf (viewport->size.height);
 
+  format = gsk_render_node_prefers_high_depth (root) ? GL_RGBA32F : GL_RGBA8;
+
   if (gsk_ngl_driver_create_render_target (self->driver,
                                            width, height,
-                                           GL_RGBA8,
+                                           format,
                                            GL_NEAREST, GL_NEAREST,
                                            &render_target))
     {