From 7d9e06d78816a32fba7a4693200c9df7f2173fb2 Mon Sep 17 00:00:00 2001 From: jules Date: Tue, 3 Apr 2012 18:18:44 +0100 Subject: [PATCH] Added OpenGL locking for OSX. --- modules/juce_opengl/native/juce_OpenGL_android.h | 2 ++ modules/juce_opengl/native/juce_OpenGL_ios.h | 2 ++ modules/juce_opengl/native/juce_OpenGL_linux.h | 2 ++ modules/juce_opengl/native/juce_OpenGL_osx.h | 16 ++++++++++++++++ modules/juce_opengl/native/juce_OpenGL_win32.h | 2 ++ .../juce_opengl/opengl/juce_OpenGLContext.cpp | 2 ++ 6 files changed, 26 insertions(+) diff --git a/modules/juce_opengl/native/juce_OpenGL_android.h b/modules/juce_opengl/native/juce_OpenGL_android.h index d75fa83ebf..1988fd3aa3 100644 --- a/modules/juce_opengl/native/juce_OpenGL_android.h +++ b/modules/juce_opengl/native/juce_OpenGL_android.h @@ -129,6 +129,8 @@ public: return nullptr; } + struct Locker { Locker (NativeContext&) {} }; + Component& component; private: diff --git a/modules/juce_opengl/native/juce_OpenGL_ios.h b/modules/juce_opengl/native/juce_OpenGL_ios.h index 1bd3fd5a06..b5dbcd48b1 100644 --- a/modules/juce_opengl/native/juce_OpenGL_ios.h +++ b/modules/juce_opengl/native/juce_OpenGL_ios.h @@ -154,6 +154,8 @@ public: int getSwapInterval() const noexcept { return swapFrames; } + struct Locker { Locker (NativeContext&) {} }; + private: JuceGLView* view; CAEAGLLayer* glLayer; diff --git a/modules/juce_opengl/native/juce_OpenGL_linux.h b/modules/juce_opengl/native/juce_OpenGL_linux.h index 2121ce6291..3f9cb41b7f 100644 --- a/modules/juce_opengl/native/juce_OpenGL_linux.h +++ b/modules/juce_opengl/native/juce_OpenGL_linux.h @@ -169,6 +169,8 @@ public: void* getRawContext() const noexcept { return renderContext; } GLuint getFrameBufferID() const noexcept { return 0; } + struct Locker { Locker (NativeContext&) {} }; + private: GLXContext renderContext; Window embeddedWindow; diff --git a/modules/juce_opengl/native/juce_OpenGL_osx.h b/modules/juce_opengl/native/juce_OpenGL_osx.h index c5cc05395d..77a8a2aec5 100644 --- a/modules/juce_opengl/native/juce_OpenGL_osx.h +++ b/modules/juce_opengl/native/juce_OpenGL_osx.h @@ -185,6 +185,22 @@ public: return [NSOpenGLContext currentContext] == renderContext; } + struct Locker + { + Locker (NativeContext& nc) : cglContext ((CGLContextObj) [nc.renderContext CGLContextObj]) + { + CGLLockContext (cglContext); + } + + ~Locker() + { + CGLUnlockContext (cglContext); + } + + private: + CGLContextObj cglContext; + }; + void swapBuffers() { [renderContext flushBuffer]; diff --git a/modules/juce_opengl/native/juce_OpenGL_win32.h b/modules/juce_opengl/native/juce_OpenGL_win32.h index 80e2b0604a..6365675db5 100644 --- a/modules/juce_opengl/native/juce_OpenGL_win32.h +++ b/modules/juce_opengl/native/juce_OpenGL_win32.h @@ -112,6 +112,8 @@ public: void* getRawContext() const noexcept { return renderContext; } unsigned int getFrameBufferID() const noexcept { return 0; } + struct Locker { Locker (NativeContext&) {} }; + private: Component dummyComponent; ScopedPointer nativeWindow; diff --git a/modules/juce_opengl/opengl/juce_OpenGLContext.cpp b/modules/juce_opengl/opengl/juce_OpenGLContext.cpp index 431482af74..5d6d4adfe7 100644 --- a/modules/juce_opengl/opengl/juce_OpenGLContext.cpp +++ b/modules/juce_opengl/opengl/juce_OpenGLContext.cpp @@ -143,6 +143,8 @@ public: if (! context.makeActive()) return false; + NativeContext::Locker locker (*nativeContext); + JUCE_CHECK_OPENGL_ERROR glViewport (0, 0, component.getWidth(), component.getHeight());