Commit: b3cb7e2652306ccf6f1cd6f96396241937d17be5
Author: Mike Erwin
Date:   Thu Aug 4 02:36:46 2016 -0400
Branches: blender2.8
https://developer.blender.org/rBb3cb7e2652306ccf6f1cd6f96396241937d17be5

OpenGL: on Mac use legacy 2.1 or core 3.2

This implements Mac part of T49012.

Removed options for EGL, ES2, compatibility profile. None of these
exist on Mac platform.

Create a GL 3.2 core context when requested at build time. Old code
just pretended to support core profile.

===================================================================

M       intern/ghost/intern/GHOST_ContextCGL.h
M       intern/ghost/intern/GHOST_ContextCGL.mm
M       intern/ghost/intern/GHOST_WindowCocoa.mm

===================================================================

diff --git a/intern/ghost/intern/GHOST_ContextCGL.h 
b/intern/ghost/intern/GHOST_ContextCGL.h
index 9532356..c2f1ce1 100644
--- a/intern/ghost/intern/GHOST_ContextCGL.h
+++ b/intern/ghost/intern/GHOST_ContextCGL.h
@@ -134,6 +134,8 @@ private:
        /** The OpenGL drawing context */
        NSOpenGLContext *m_openGLContext;
 
+       bool m_coreProfile;
+
        //static CGLEWContext *s_cglewContext;
 
        /** The first created OpenGL context (for sharing display lists) */
diff --git a/intern/ghost/intern/GHOST_ContextCGL.mm 
b/intern/ghost/intern/GHOST_ContextCGL.mm
index e09de4b..7642bad 100644
--- a/intern/ghost/intern/GHOST_ContextCGL.mm
+++ b/intern/ghost/intern/GHOST_ContextCGL.mm
@@ -62,6 +62,23 @@ GHOST_ContextCGL::GHOST_ContextCGL(
       m_openGLContext(nil)
 {
        assert(openGLView != nil);
+
+       // for now be very strict about OpenGL version requested
+       switch (contextMajorVersion) {
+               case 2:
+                       assert(contextMinorVersion == 1);
+                       assert(contextProfileMask == 0);
+                       m_coreProfile = false;
+                       break;
+               case 3:
+                       // Apple didn't implement 3.0 or 3.1
+                       assert(contextMinorVersion == 2);
+                       assert(contextProfileMask == 
GL_CONTEXT_CORE_PROFILE_BIT);
+                       m_coreProfile = true;
+                       break;
+               default:
+                       assert(false);
+       }
 }
 
 
@@ -169,11 +186,15 @@ GHOST_TSuccess GHOST_ContextCGL::updateDrawingContext()
 
 static void makeAttribList(
         std::vector<NSOpenGLPixelFormatAttribute>& attribs,
+        bool coreProfile,
         bool stereoVisual,
         int numOfAASamples,
         bool needAlpha,
         bool needStencil)
 {
+       attribs.push_back(NSOpenGLPFAOpenGLProfile);
+       attribs.push_back(coreProfile ? NSOpenGLProfileVersion3_2Core : 
NSOpenGLProfileVersionLegacy);
+       
        // Pixel Format Attributes for the windowed NSOpenGLContext
        attribs.push_back(NSOpenGLPFADoubleBuffer);
 
@@ -248,7 +269,7 @@ GHOST_TSuccess GHOST_ContextCGL::initializeDrawingContext()
        static const bool needStencil = false;
 #endif
 
-       makeAttribList(attribs, m_stereoVisual, m_numOfAASamples, needAlpha, 
needStencil);
+       makeAttribList(attribs, m_coreProfile, m_stereoVisual, 
m_numOfAASamples, needAlpha, needStencil);
 
        NSOpenGLPixelFormat *pixelFormat;
 
@@ -261,7 +282,7 @@ GHOST_TSuccess GHOST_ContextCGL::initializeDrawingContext()
                // (Now that I think about it, does WGL really require the code 
that it has for finding a lesser match?)
 
                attribs.clear();
-               makeAttribList(attribs, m_stereoVisual, 0, needAlpha, 
needStencil);
+               makeAttribList(attribs, m_coreProfile, m_stereoVisual, 0, 
needAlpha, needStencil);
                pixelFormat = [[NSOpenGLPixelFormat alloc] 
initWithAttributes:&attribs[0]];
        }
 
diff --git a/intern/ghost/intern/GHOST_WindowCocoa.mm 
b/intern/ghost/intern/GHOST_WindowCocoa.mm
index 00e00b6..925c6ea 100644
--- a/intern/ghost/intern/GHOST_WindowCocoa.mm
+++ b/intern/ghost/intern/GHOST_WindowCocoa.mm
@@ -1087,82 +1087,23 @@ GHOST_TSuccess 
GHOST_WindowCocoa::setOrder(GHOST_TWindowOrder order)
 GHOST_Context *GHOST_WindowCocoa::newDrawingContext(GHOST_TDrawingContextType 
type)
 {
        if (type == GHOST_kDrawingContextTypeOpenGL) {
-#if !defined(WITH_GL_EGL)
 
-#if defined(WITH_GL_PROFILE_CORE)
-               GHOST_Context *context = new GHOST_ContextCGL(
-                       m_wantStereoVisual,
-                       m_wantNumOfAASamples,
-                       m_window,
-                       m_openGLView,
-                       GL_CONTEXT_CORE_PROFILE_BIT,
-                       3, 2,
-                       GHOST_OPENGL_CGL_CONTEXT_FLAGS,
-                       GHOST_OPENGL_CGL_RESET_NOTIFICATION_STRATEGY);
-#elif defined(WITH_GL_PROFILE_ES20)
                GHOST_Context *context = new GHOST_ContextCGL(
                        m_wantStereoVisual,
                        m_wantNumOfAASamples,
                        m_window,
                        m_openGLView,
-                       CGL_CONTEXT_ES2_PROFILE_BIT_EXT,
-                       2, 0,
-                       GHOST_OPENGL_CGL_CONTEXT_FLAGS,
-                       GHOST_OPENGL_CGL_RESET_NOTIFICATION_STRATEGY);
-#elif defined(WITH_GL_PROFILE_COMPAT)
-               GHOST_Context *context = new GHOST_ContextCGL(
-                       m_wantStereoVisual,
-                       m_wantNumOfAASamples,
-                       m_window,
-                       m_openGLView,
-                       0, // profile bit
-                       0, 0,
-                       GHOST_OPENGL_CGL_CONTEXT_FLAGS,
-                       GHOST_OPENGL_CGL_RESET_NOTIFICATION_STRATEGY);
-#else
-#  error
-#endif
-
-#else
 
 #if defined(WITH_GL_PROFILE_CORE)
-               GHOST_Context *context = new GHOST_ContextEGL(
-                       m_wantStereoVisual,
-                       m_wantNumOfAASamples,
-                       m_window,
-                       m_openGLView,
-                       EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT,
+                       GL_CONTEXT_CORE_PROFILE_BIT,
                        3, 2,
-                       GHOST_OPENGL_EGL_CONTEXT_FLAGS,
-                       GHOST_OPENGL_EGL_RESET_NOTIFICATION_STRATEGY,
-                       EGL_OPENGL_API);
-#elif defined(WITH_GL_PROFILE_ES20)
-               GHOST_Context *context = new GHOST_ContextEGL(
-                       m_wantStereoVisual,
-                       m_wantNumOfAASamples,
-                       m_window,
-                       m_openGLView,
-                       0, // profile bit
-                       2, 0,
-                       GHOST_OPENGL_EGL_CONTEXT_FLAGS,
-                       GHOST_OPENGL_EGL_RESET_NOTIFICATION_STRATEGY,
-                       EGL_OPENGL_ES_API);
-#elif defined(WITH_GL_PROFILE_COMPAT)
-               GHOST_Context *context = new GHOST_ContextEGL(
-                       m_wantStereoVisual,
-                       m_wantNumOfAASamples,
-                       m_window,
-                       m_openGLView,
-                       0, // profile bit
-                       0, 0,
-                       GHOST_OPENGL_EGL_CONTEXT_FLAGS,
-                       GHOST_OPENGL_EGL_RESET_NOTIFICATION_STRATEGY,
-                       EGL_OPENGL_API);
 #else
-#  error
+                       0, // no profile bit
+                       2, 1,
 #endif
+                       GHOST_OPENGL_CGL_CONTEXT_FLAGS,
+                       GHOST_OPENGL_CGL_RESET_NOTIFICATION_STRATEGY);
 
-#endif
                if (context->initializeDrawingContext())
                        return context;
                else

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to