Commit: 9accd7e58086d26c1287c2e8876a381d1249180e Author: Brecht Van Lommel Date: Mon Feb 12 17:01:27 2018 +0100 Branches: temp-drawcontext https://developer.blender.org/rB9accd7e58086d26c1287c2e8876a381d1249180e
GHOST: offscreen context support for macOS. =================================================================== M intern/ghost/GHOST_IContext.h M intern/ghost/intern/GHOST_ContextCGL.mm M intern/ghost/intern/GHOST_SystemCocoa.h M intern/ghost/intern/GHOST_SystemCocoa.mm =================================================================== diff --git a/intern/ghost/GHOST_IContext.h b/intern/ghost/GHOST_IContext.h index 33cbbe7bacd..fd8647b6335 100644 --- a/intern/ghost/GHOST_IContext.h +++ b/intern/ghost/GHOST_IContext.h @@ -45,7 +45,7 @@ * \see GHOST_ISystem#createOffscreenContext * * \author Clément Foucault - * \date Fev 9, 2012 + * \date Feb 9, 2018 */ class GHOST_IContext { diff --git a/intern/ghost/intern/GHOST_ContextCGL.mm b/intern/ghost/intern/GHOST_ContextCGL.mm index 03af3cc497e..88aba680f91 100644 --- a/intern/ghost/intern/GHOST_ContextCGL.mm +++ b/intern/ghost/intern/GHOST_ContextCGL.mm @@ -62,8 +62,6 @@ GHOST_ContextCGL::GHOST_ContextCGL( m_openGLContext(nil), m_debug(contextFlags) { - assert(openGLView != nil); - // for now be very strict about OpenGL version requested switch (contextMajorVersion) { case 2: @@ -88,7 +86,10 @@ GHOST_ContextCGL::~GHOST_ContextCGL() if (m_openGLContext != nil) { if (m_openGLContext == [NSOpenGLContext currentContext]) { [NSOpenGLContext clearCurrentContext]; - [m_openGLView clearGLContext]; + + if(m_openGLView) { + [m_openGLView clearGLContext]; + } } if (m_openGLContext != s_sharedOpenGLContext || s_sharedCount == 1) { @@ -258,7 +259,7 @@ GHOST_TSuccess GHOST_ContextCGL::initializeDrawingContext() std::vector<NSOpenGLPixelFormatAttribute> attribs; attribs.reserve(40); - NSOpenGLContext *prev_openGLContext = [m_openGLView openGLContext]; + NSOpenGLContext *prev_openGLContext = (m_openGLView) ? [m_openGLView openGLContext] : NULL; #ifdef GHOST_OPENGL_ALPHA static const bool needAlpha = true; @@ -362,8 +363,10 @@ GHOST_TSuccess GHOST_ContextCGL::initializeDrawingContext() initContextGLEW(); - [m_openGLView setOpenGLContext:m_openGLContext]; - [m_openGLContext setView:m_openGLView]; + if (m_openGLView) { + [m_openGLView setOpenGLContext:m_openGLContext]; + [m_openGLContext setView:m_openGLView]; + } if (s_sharedCount == 0) s_sharedOpenGLContext = m_openGLContext; @@ -380,7 +383,10 @@ GHOST_TSuccess GHOST_ContextCGL::initializeDrawingContext() error: - [m_openGLView setOpenGLContext:prev_openGLContext]; + if (m_openGLView) { + [m_openGLView setOpenGLContext:prev_openGLContext]; + } + [pixelFormat release]; [pool drain]; diff --git a/intern/ghost/intern/GHOST_SystemCocoa.h b/intern/ghost/intern/GHOST_SystemCocoa.h index 6802ad42c7b..62d9774d81d 100644 --- a/intern/ghost/intern/GHOST_SystemCocoa.h +++ b/intern/ghost/intern/GHOST_SystemCocoa.h @@ -123,6 +123,25 @@ public: const GHOST_TEmbedderWindowID parentWindow = 0 ); + /** + * Create a new offscreen context. + * Never explicitly delete the context, use disposeContext() instead. + * \return The new context (or 0 if creation failed). + */ + GHOST_IContext * + createOffscreenContext( + ); + + /** + * Dispose of a context. + * \param context Pointer to the context to be disposed. + * \return Indication of success. + */ + GHOST_TSuccess + disposeContext( + GHOST_IContext *context + ); + /*************************************************************************************** * Event management functionality ***************************************************************************************/ diff --git a/intern/ghost/intern/GHOST_SystemCocoa.mm b/intern/ghost/intern/GHOST_SystemCocoa.mm index e9fffb6f60b..16d9de396f6 100644 --- a/intern/ghost/intern/GHOST_SystemCocoa.mm +++ b/intern/ghost/intern/GHOST_SystemCocoa.mm @@ -27,15 +27,6 @@ * ***** END GPL LICENSE BLOCK ***** */ -#import <Cocoa/Cocoa.h> - -/*For the currently not ported to Cocoa keyboard layout functions (64bit & 10.6 compatible)*/ -#include <Carbon/Carbon.h> - -#include <sys/time.h> -#include <sys/types.h> -#include <sys/sysctl.h> - #include "GHOST_SystemCocoa.h" #include "GHOST_DisplayManagerCocoa.h" @@ -51,12 +42,26 @@ #include "GHOST_WindowManager.h" #include "GHOST_WindowCocoa.h" +#if defined(WITH_GL_EGL) +# include "GHOST_ContextEGL.h" +#else +# include "GHOST_ContextCGL.h" +#endif + #ifdef WITH_INPUT_NDOF #include "GHOST_NDOFManagerCocoa.h" #endif #include "AssertMacros.h" +#import <Cocoa/Cocoa.h> + +/* For the currently not ported to Cocoa keyboard layout functions (64bit & 10.6 compatible) */ +#include <Carbon/Carbon.h> + +#include <sys/time.h> +#include <sys/types.h> +#include <sys/sysctl.h> #pragma mark KeyMap, mouse converters @@ -580,6 +585,53 @@ GHOST_IWindow* GHOST_SystemCocoa::createWindow( return window; } +/** + * Create a new offscreen context. + * Never explicitly delete the context, use disposeContext() instead. + * \return The new context (or 0 if creation failed). + */ +GHOST_IContext * +GHOST_SystemCocoa:: +createOffscreenContext() +{ + GHOST_Context *context = new GHOST_ContextCGL( + false, + 0, + NULL, + NULL, + +#if defined(WITH_GL_PROFILE_CORE) + GL_CONTEXT_CORE_PROFILE_BIT, + 3, 2, +#else + 0, // no profile bit + 2, 1, +#endif + GHOST_OPENGL_CGL_CONTEXT_FLAGS, + GHOST_OPENGL_CGL_RESET_NOTIFICATION_STRATEGY); + + if (context->initializeDrawingContext()) + return context; + else + delete context; + + return NULL; +} + +/** + * Dispose of a context. + * \param context Pointer to the context to be disposed. + * \return Indication of success. + */ +GHOST_TSuccess +GHOST_SystemCocoa:: +disposeContext(GHOST_IContext *context) +{ + delete context; + + return GHOST_kSuccess; +} + /** * \note : returns coordinates in Cocoa screen coordinates */ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs