[gtk/wip/chergert/gdk-macos-for-master: 2/3] macos: glFlush() when switching GL contexts




commit 27b9a9e7eff60d57cb31fc496cab41873cbd236b
Author: Christian Hergert <chergert redhat com>
Date:   Thu Nov 26 11:18:10 2020 -0800

    macos: glFlush() when switching GL contexts
    
    The Mac OpenGL programming guide suggests that you glFlush() before changing
    contexts to ensure that the commands have been submitted.

 gdk/macos/gdkmacosglcontext.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)
---
diff --git a/gdk/macos/gdkmacosglcontext.c b/gdk/macos/gdkmacosglcontext.c
index 06829b9184..00ddfefcde 100644
--- a/gdk/macos/gdkmacosglcontext.c
+++ b/gdk/macos/gdkmacosglcontext.c
@@ -447,15 +447,28 @@ _gdk_macos_gl_context_new (GdkMacosSurface  *surface,
 gboolean
 _gdk_macos_gl_context_make_current (GdkMacosGLContext *self)
 {
+  NSOpenGLContext *current;
+
   g_return_val_if_fail (GDK_IS_MACOS_GL_CONTEXT (self), FALSE);
 
-  if (self->gl_context != nil)
+  if (self->gl_context == NULL)
+    return FALSE;
+
+  current = [NSOpenGLContext currentContext];
+
+  if (self->gl_context != current)
     {
+      /* The OpenGL mac programming guide suggests that glFlush() is called
+       * before switching current contexts to ensure that the drawing commands
+       * are submitted.
+       */
+      if (current != NULL)
+        glFlush ();
+
       [self->gl_context makeCurrentContext];
-      return TRUE;
     }
 
-  return FALSE;
+  return TRUE;
 }
 
 G_GNUC_END_IGNORE_DEPRECATIONS


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]