From 2aeff053c55dadafb94bfbba661250e0c96f1fe5 Mon Sep 17 00:00:00 2001
From: Sven Gothel <sgothel@jausoft.com>
Date: Fri, 15 Feb 2013 17:15:49 +0100
Subject: Fix Bug 691 (part-2): Extra '[subLayer release]' is wrong, since
 'CGL.releaseNSOpenGLLayer' triggers release - but very late w/ AWT usage.

OSXUtil_RemoveCASublayer0's added '[subLayer release]' in commit f6e6fab2a7ddfb5c9b614cb072c27ff697629161
is wrong, since 'CGL.releaseNSOpenGLLayer' actually does trigger it's release.
This was not seen w/ AWT tests, since it happens very later.
A NewtCanvasAWT test disclosed this error -> removed that extra release call.

The culprit for the late release w/ AWT usage was CGL.createNSOpenGLLayer's call in the current thread.
Moving it to the Main-Thread fixed the problem.

All CALayer lifecycle calls are issued on the Main-Thread now.

NSOpenGLLayer's CVDisplayLink OpenGL fitting via 'CVDisplayLinkSetCurrentCGDisplayFromOpenGLContext'
is now performed at it's context creation in 'NSOpenGLLayer::openGLContextForPixelFormat'.

The 'extra' release of the NSOpenGLLayer's NSOpenGLContext as introduced in commit f6e6fab2a7ddfb5c9b614cb072c27ff697629161
is still valid.
---
 make/config/jogl/cgl-macosx-CustomJavaCode.java | 22 ++++++++++++++++++++++
 make/config/jogl/cgl-macosx.cfg                 |  9 +++++++++
 2 files changed, 31 insertions(+)
 create mode 100644 make/config/jogl/cgl-macosx-CustomJavaCode.java

(limited to 'make/config')

diff --git a/make/config/jogl/cgl-macosx-CustomJavaCode.java b/make/config/jogl/cgl-macosx-CustomJavaCode.java
new file mode 100644
index 000000000..b9a37d0c6
--- /dev/null
+++ b/make/config/jogl/cgl-macosx-CustomJavaCode.java
@@ -0,0 +1,22 @@
+
+/**
+ * Creates the NSOpenGLLayer for FBO/PBuffer w/ optional GL3 shader program on Main-Thread
+ */
+public static long createNSOpenGLLayer(final long ctx, final int gl3ShaderProgramName, final long fmt, final long p, 
+                                       final int texID, final boolean opaque, final int texWidth, final int texHeight) {
+  return OSXUtil.RunOnMainThread(true, new Function<Long, Object>() {
+   public Long eval(Object... args) {
+       return Long.valueOf( createNSOpenGLLayerImpl(ctx, gl3ShaderProgramName, fmt, p, texID, opaque, texWidth, texHeight) );
+   } } ).longValue();
+}
+
+/**
+ * Releases the NSOpenGLLayer on Main-Thread
+ */
+public static void releaseNSOpenGLLayer(final long nsOpenGLLayer) {
+  OSXUtil.RunOnMainThread(true, new Runnable() {
+      public void run() {
+          releaseNSOpenGLLayerImpl(nsOpenGLLayer);
+      } } );
+}
+
diff --git a/make/config/jogl/cgl-macosx.cfg b/make/config/jogl/cgl-macosx.cfg
index 203802d29..98123f605 100644
--- a/make/config/jogl/cgl-macosx.cfg
+++ b/make/config/jogl/cgl-macosx.cfg
@@ -34,6 +34,13 @@ Opaque long NSOpenGLLayer *
 CustomCCode #include </usr/include/machine/types.h>
 CustomCCode #include "macosx-window-system.h"
 
+AccessControl createNSOpenGLLayerImpl PRIVATE
+AccessControl releaseNSOpenGLLayerImpl PRIVATE
+RenameJavaMethod createNSOpenGLLayer createNSOpenGLLayerImpl
+RenameJavaMethod releaseNSOpenGLLayer releaseNSOpenGLLayerImpl
+
+IncludeAs CustomJavaCode CGL cgl-macosx-CustomJavaCode.java
+
 # Implement the first argument to getProcAddress as String instead
 # of byte[]
 ArgumentIsString getProcAddress 0
@@ -53,3 +60,5 @@ DropUniqVendorExtensions SGIX
 DropUniqVendorExtensions SUN
 DropUniqVendorExtensions WIN
 
+Import com.jogamp.common.util.Function
+Import jogamp.nativewindow.macosx.OSXUtil
-- 
cgit v1.2.3