[gtk/wip/chergert/gdk-macos-gl-renderer] macos: always create dummy window/view for GL context




commit 929fb25a69bbddb93d9df88f4b6f56b88a53fc05
Author: Christian Hergert <chergert redhat com>
Date:   Wed Nov 4 14:40:11 2020 -0800

    macos: always create dummy window/view for GL context
    
    This simplifies the creation by always creating the dummy views, and then
    removes it if necessary by detecting the begin_frame/end_frame pair.

 gdk/macos/gdkmacosglcontext.c | 40 ++++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 20 deletions(-)
---
diff --git a/gdk/macos/gdkmacosglcontext.c b/gdk/macos/gdkmacosglcontext.c
index e1d792a41e..7770ec4ea3 100644
--- a/gdk/macos/gdkmacosglcontext.c
+++ b/gdk/macos/gdkmacosglcontext.c
@@ -143,6 +143,18 @@ ensure_gl_view (GdkMacosGLContext *self)
       [nsview setNeedsDisplay:YES];
       [nswindow setContentView:nsview];
       [nsview release];
+
+      if (self->dummy_view != NULL)
+        {
+          NSView *nsview = g_steal_pointer (&self->dummy_view);
+          [nsview release];
+        }
+
+      if (self->dummy_window != NULL)
+        {
+          NSWindow *nswindow = g_steal_pointer (&self->dummy_window);
+          [nswindow release];
+        }
     }
 
   return [nswindow contentView];
@@ -215,21 +227,15 @@ gdk_macos_gl_context_real_realize (GdkGLContext  *context,
   [gl_context setValues:&opaque forParameter:NSOpenGLCPSurfaceOpacity];
   [gl_context setValues:&validate forParameter:NSOpenGLContextParameterStateValidation];
 
-  if (self->is_attached || shared == NULL)
-    {
-      NSRect frame = NSMakeRect (0, 0, 1, 1);
-
-      self->dummy_window = [[NSWindow alloc] initWithContentRect:frame
-                                                       styleMask:0
-                                                         backing:NSBackingStoreBuffered
-                                                           defer:NO
-                                                          screen:nil];
-      self->dummy_view = [[NSView alloc] initWithFrame:frame];
-      [self->dummy_window setContentView:self->dummy_view];
-      [gl_context setView:self->dummy_view];
-    }
+  self->dummy_window = [[NSWindow alloc] initWithContentRect:NSZeroRect
+                                                   styleMask:0
+                                                     backing:NSBackingStoreBuffered
+                                                       defer:NO
+                                                      screen:nil];
+  self->dummy_view = [[NSView alloc] initWithFrame:NSZeroRect];
+  [self->dummy_window setContentView:self->dummy_view];
+  [gl_context setView:self->dummy_view];
 
-  [gl_context makeCurrentContext];
   GLint renderer_id = 0;
   [gl_context getValues:&renderer_id forParameter:NSOpenGLContextParameterCurrentRendererID];
   GDK_DISPLAY_NOTE (gdk_draw_context_get_display (GDK_DRAW_CONTEXT (context)),
@@ -237,7 +243,6 @@ gdk_macos_gl_context_real_realize (GdkGLContext  *context,
                     g_message ("Created NSOpenGLContext[%p] using %s",
                                gl_context,
                                get_renderer_name (renderer_id)));
-  [NSOpenGLContext clearCurrentContext];
 
   self->gl_context = g_steal_pointer (&gl_context);
 
@@ -339,17 +344,12 @@ gdk_macos_gl_context_dispose (GObject *gobject)
   if (self->dummy_view != nil)
     {
       NSView *nsview = g_steal_pointer (&self->dummy_view);
-
-      if (GDK_IS_MACOS_GL_VIEW (nsview))
-        [(GdkMacosGLView *)nsview setOpenGLContext:nil];
-
       [nsview release];
     }
 
   if (self->dummy_window != nil)
     {
       NSWindow *nswindow = g_steal_pointer (&self->dummy_window);
-
       [nswindow release];
     }
 


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