ngl: Update framebuffer format for each frame
authorMatthias Clasen <mclasen@redhat.com>
Fri, 1 Oct 2021 20:47:55 +0000 (16:47 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 7 Oct 2021 01:35:25 +0000 (21:35 -0400)
Look at whether the render nodes are high depth and
if so, request a high depth framebuffer.
Whether we actually get one is up to the backend.

gsk/ngl/gsknglrenderer.c

index 7263d0b1e46e21bf8984763d4a27c4c09027b239..e5aaebd0a4bd74f067fdacbbffc5a351ecd816b8 100644 (file)
 
 #include <gdk/gdkprofilerprivate.h>
 #include <gdk/gdkdisplayprivate.h>
+#include <gdk/gdkglcontextprivate.h>
+#include <gdk/gdksurfaceprivate.h>
 #include <gsk/gskdebugprivate.h>
 #include <gsk/gskrendererprivate.h>
+#include <gsk/gskrendernodeprivate.h>
 
 #include "gsknglcommandqueueprivate.h"
 #include "gskngldriverprivate.h"
@@ -201,7 +204,9 @@ gsk_ngl_renderer_render (GskRenderer          *renderer,
   viewport.size.height = gdk_surface_get_height (surface) * scale_factor;
 
   gdk_gl_context_make_current (self->context);
-  gdk_draw_context_begin_frame (GDK_DRAW_CONTEXT (self->context), update_area);
+  gdk_draw_context_begin_frame_full (GDK_DRAW_CONTEXT (self->context),
+                                     gsk_render_node_prefers_high_depth (root),
+                                     update_area);
 
   /* Must be called *AFTER* gdk_draw_context_begin_frame() */
   render_region = get_render_region (surface, self->context);