[gtk/wip/otte/gleanup: 70/73] gl: Fix issue with EGL + nvidia
- From: Chun-wei Fan <fanchunwei src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/otte/gleanup: 70/73] gl: Fix issue with EGL + nvidia
- Date: Wed, 14 Jul 2021 04:21:53 +0000 (UTC)
commit bd8b4da57a0b62788c583b2ef6775c49e88368da
Author: Benjamin Otte <otte redhat com>
Date: Sat Jul 10 02:29:17 2021 +0200
gl: Fix issue with EGL + nvidia
nvidia sets the default draw buffer to GL_NONE if EGL contexts are
initially bound to EGL_NO_SURFACE which is exactly what we are doing. So
bind them to GL_BACK when drawing, as they should be.
See https://phabricator.services.mozilla.com/D118743 for a discussion
about EGL_NO_CONTEXT and draw buffers.
gdk/wayland/gdkglcontext-wayland.c | 11 +++++++++++
gdk/x11/gdkglcontext-egl.c | 10 ++++++++++
2 files changed, 21 insertions(+)
---
diff --git a/gdk/wayland/gdkglcontext-wayland.c b/gdk/wayland/gdkglcontext-wayland.c
index 558c9cfed0..3e1fbe3f59 100644
--- a/gdk/wayland/gdkglcontext-wayland.c
+++ b/gdk/wayland/gdkglcontext-wayland.c
@@ -276,6 +276,16 @@ gdk_wayland_gl_context_make_current (GdkGLContext *context,
egl_surface,
context_wayland->egl_context);
}
+
+static void
+gdk_wayland_gl_context_begin_frame (GdkDrawContext *draw_context,
+ cairo_region_t *region)
+{
+ GDK_DRAW_CONTEXT_CLASS (gdk_wayland_gl_context_parent_class)->begin_frame (draw_context, region);
+
+ glDrawBuffer (GL_BACK);
+}
+
static void
gdk_wayland_gl_context_end_frame (GdkDrawContext *draw_context,
cairo_region_t *painted)
@@ -337,6 +347,7 @@ gdk_wayland_gl_context_class_init (GdkWaylandGLContextClass *klass)
gobject_class->dispose = gdk_wayland_gl_context_dispose;
+ draw_context_class->begin_frame = gdk_wayland_gl_context_begin_frame;
draw_context_class->end_frame = gdk_wayland_gl_context_end_frame;
context_class->realize = gdk_wayland_gl_context_realize;
diff --git a/gdk/x11/gdkglcontext-egl.c b/gdk/x11/gdkglcontext-egl.c
index b5a571303c..40c458b2d4 100644
--- a/gdk/x11/gdkglcontext-egl.c
+++ b/gdk/x11/gdkglcontext-egl.c
@@ -310,6 +310,15 @@ gdk_x11_surface_destroy_egl_surface (GdkX11Surface *self)
self->egl_surface = NULL;
}
+static void
+gdk_x11_gl_context_egl_begin_frame (GdkDrawContext *draw_context,
+ cairo_region_t *region)
+{
+ GDK_DRAW_CONTEXT_CLASS (gdk_x11_gl_context_egl_parent_class)->begin_frame (draw_context, region);
+
+ glDrawBuffer (GL_BACK);
+}
+
static void
gdk_x11_gl_context_egl_end_frame (GdkDrawContext *draw_context,
cairo_region_t *painted)
@@ -637,6 +646,7 @@ gdk_x11_gl_context_egl_class_init (GdkX11GLContextEGLClass *klass)
context_class->clear_current = gdk_x11_gl_context_egl_clear_current;
context_class->get_damage = gdk_x11_gl_context_egl_get_damage;
+ draw_context_class->begin_frame = gdk_x11_gl_context_egl_begin_frame;
draw_context_class->end_frame = gdk_x11_gl_context_egl_end_frame;
gobject_class->dispose = gdk_x11_gl_context_egl_dispose;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]