Revision: 23789
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23789
Author:   damien78
Date:     2009-10-12 18:51:36 +0200 (Mon, 12 Oct 2009)

Log Message:
-----------
Cocoa : fix secondary window display bug issue

Modified Paths:
--------------
    trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.h
    trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.mm

Modified: trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.h
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.h       2009-10-12 
16:34:55 UTC (rev 23788)
+++ trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.h       2009-10-12 
16:51:36 UTC (rev 23789)
@@ -275,6 +275,9 @@
        /** The mother SystemCocoa class to send events */
        GHOST_SystemCocoa *m_systemCocoa;
                        
+       /** The first created OpenGL context (for sharing display lists) */
+       static NSOpenGLContext *s_firstOpenGLcontext;
+       
        NSCursor*       m_customCursor;
 
        GHOST_TabletData m_tablet;

Modified: trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.mm
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.mm      2009-10-12 
16:34:55 UTC (rev 23788)
+++ trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.mm      2009-10-12 
16:51:36 UTC (rev 23789)
@@ -149,6 +149,8 @@
 
 #pragma mark initialization / finalization
 
+NSOpenGLContext* GHOST_WindowCocoa::s_firstOpenGLcontext = nil;
+
 GHOST_WindowCocoa::GHOST_WindowCocoa(
        GHOST_SystemCocoa *systemCocoa,
        const STR_String& title,
@@ -197,7 +199,7 @@
        
        [pixelFormat release];
        
-       m_openGLContext = [m_openGLView openGLContext];
+       m_openGLContext = [m_openGLView openGLContext]; //This context will be 
replaced by the proper one just after
        
        [m_window setContentView:m_openGLView];
        [m_window setInitialFirstResponder:m_openGLView];
@@ -229,9 +231,6 @@
 {
        if (m_customCursor) delete m_customCursor;
 
-       /*if(ugly_hack==m_windowRef) ugly_hack= NULL;
-       
-       if(ugly_hack==NULL) 
setDrawingContextType(GHOST_kDrawingContextTypeNone);*/
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        [m_openGLView release];
        
@@ -670,12 +669,15 @@
                case GHOST_kDrawingContextTypeOpenGL:
                        if (!getValid()) break;
                                        
-                               pixelFormat = [m_openGLView pixelFormat];
-                               tmpOpenGLContext = [[NSOpenGLContext alloc] 
initWithFormat:pixelFormat
-                                                                               
                                          shareContext:m_openGLContext];
-                               if (tmpOpenGLContext == nil)
-                                       success = GHOST_kFailure;
-                                       break;
+                       pixelFormat = [m_openGLView pixelFormat];
+                       tmpOpenGLContext = [[NSOpenGLContext alloc] 
initWithFormat:pixelFormat
+                                                                               
                                          shareContext:s_firstOpenGLcontext];
+                       if (tmpOpenGLContext == nil) {
+                               success = GHOST_kFailure;
+                               break;
+                       }
+                       
+                       if (!s_firstOpenGLcontext) s_firstOpenGLcontext = 
tmpOpenGLContext;
 #ifdef WAIT_FOR_VSYNC
                                /* wait for vsync, to avoid tearing artifacts */
                                [tmpOpenGLContext setValues:1 
forParameter:NSOpenGLCPSwapInterval];
@@ -683,7 +685,6 @@
                                [m_openGLView 
setOpenGLContext:tmpOpenGLContext];
                                [tmpOpenGLContext setView:m_openGLView];
                                
-                               [m_openGLContext release];
                                m_openGLContext = tmpOpenGLContext;
                        break;
                
@@ -704,7 +705,12 @@
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        switch (m_drawingContextType) {
                case GHOST_kDrawingContextTypeOpenGL:
-                       [m_openGLView clearGLContext];
+                       if (m_openGLContext)
+                       {
+                               [m_openGLView clearGLContext];
+                               if (s_firstOpenGLcontext == m_openGLContext) 
s_firstOpenGLcontext = nil;
+                               m_openGLContext = nil;
+                       }
                        [pool drain];
                        return GHOST_kSuccess;
                case GHOST_kDrawingContextTypeNone:


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to