From a179278e2fc162b1b720280b1dd82bd383ea7fac Mon Sep 17 00:00:00 2001 From: Lukas Hermanns Date: Wed, 2 May 2018 15:09:10 +0200 Subject: [PATCH] Implemented single GLRC option on MacOS port. --- src/nsgl_context.m | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/nsgl_context.m b/src/nsgl_context.m index 82af90636..3a920aacc 100644 --- a/src/nsgl_context.m +++ b/src/nsgl_context.m @@ -30,7 +30,12 @@ static void makeContextCurrentNSGL(_GLFWwindow* window) { if (window) + { +#ifdef _GLFW_OPENGL_SINGLE_GLRC + [window->context.nsgl.object setView:window->ns.view]; +#endif [window->context.nsgl.object makeCurrentContext]; + } else [NSOpenGLContext clearCurrentContext]; @@ -79,7 +84,12 @@ static void destroyContextNSGL(_GLFWwindow* window) [window->context.nsgl.pixelFormat release]; window->context.nsgl.pixelFormat = nil; +#ifdef _GLFW_OPENGL_SINGLE_GLRC + if (window->context.customctx) + [window->context.nsgl.object release]; +#else [window->context.nsgl.object release]; +#endif window->context.nsgl.object = nil; } @@ -281,6 +291,22 @@ GLFWbool _glfwCreateContextNSGL(_GLFWwindow* window, return GLFW_FALSE; } +#ifdef _GLFW_OPENGL_SINGLE_GLRC + if (ctxconfig->share) + { + // Use shared context instead of creating a new one + window->context.nsgl.object = ctxconfig->share->context.nsgl.object; + window->context.customctx = GLFW_FALSE; + } + else + { + // Create new GL context + window->context.nsgl.object = + [[NSOpenGLContext alloc] initWithFormat:window->context.nsgl.pixelFormat + shareContext:nil]; + window->context.customctx = GLFW_TRUE; + } +#else NSOpenGLContext* share = NULL; if (ctxconfig->share) @@ -289,13 +315,15 @@ GLFWbool _glfwCreateContextNSGL(_GLFWwindow* window, window->context.nsgl.object = [[NSOpenGLContext alloc] initWithFormat:window->context.nsgl.pixelFormat shareContext:share]; +#endif + if (window->context.nsgl.object == nil) { _glfwInputError(GLFW_VERSION_UNAVAILABLE, "NSGL: Failed to create OpenGL context"); return GLFW_FALSE; } - + if (fbconfig->transparent) { GLint opaque = 0;