|
From: <ka...@us...> - 2011-10-06 20:16:43
|
Revision: 3650
http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3650&view=rev
Author: kappa1
Date: 2011-10-06 20:16:37 +0000 (Thu, 06 Oct 2011)
Log Message:
-----------
apply CL/GL interop patch for mac, thx to jaekwon for patch.
Modified Paths:
--------------
trunk/LWJGL/src/java/org/lwjgl/opengl/ContextGL.java
trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXContextImplementation.java
trunk/LWJGL/src/native/macosx/org_lwjgl_opengl_MacOSXContextImplementation.m
Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/ContextGL.java
===================================================================
--- trunk/LWJGL/src/java/org/lwjgl/opengl/ContextGL.java 2011-10-05 19:19:00 UTC (rev 3649)
+++ trunk/LWJGL/src/java/org/lwjgl/opengl/ContextGL.java 2011-10-06 20:16:37 UTC (rev 3650)
@@ -36,6 +36,7 @@
import org.lwjgl.PointerBuffer;
import org.lwjgl.Sys;
import org.lwjgl.opencl.KHRGLSharing;
+import org.lwjgl.opencl.APPLEGLSharing;
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
@@ -275,8 +276,16 @@
properties.put(KHRGLSharing.CL_GL_CONTEXT_KHR).put(implLinux.getGLXContext(handle));
properties.put(KHRGLSharing.CL_GLX_DISPLAY_KHR).put(implLinux.getDisplay(peer_handle));
break;
+ case LWJGLUtil.PLATFORM_MACOSX:
+ if (LWJGLUtil.isMacOSXEqualsOrBetterThan(10, 6)) { // only supported on OS X 10.6+
+ // http://oscarbg.blogspot.com/2009/10/about-opencl-opengl-interop.html
+ final MacOSXContextImplementation implMacOSX = (MacOSXContextImplementation)implementation;
+ final long CGLShareGroup = implMacOSX.getCGLShareGroup(handle);
+ properties.put(APPLEGLSharing.CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE).put(CGLShareGroup);
+ break;
+ }
default:
- throw new UnsupportedOperationException("CL/GL context sharing is not supposed on this platform.");
+ throw new UnsupportedOperationException("CL/GL context sharing is not supported on this platform.");
}
} finally {
peer_info.unlock();
Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXContextImplementation.java
===================================================================
--- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXContextImplementation.java 2011-10-05 19:19:00 UTC (rev 3649)
+++ trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXContextImplementation.java 2011-10-06 20:16:37 UTC (rev 3650)
@@ -63,6 +63,8 @@
}
}
+ native long getCGLShareGroup(ByteBuffer context_handle);
+
private static native void nSwapBuffers(ByteBuffer context_handle) throws LWJGLException;
public void update(ByteBuffer context_handle) {
Modified: trunk/LWJGL/src/native/macosx/org_lwjgl_opengl_MacOSXContextImplementation.m
===================================================================
--- trunk/LWJGL/src/native/macosx/org_lwjgl_opengl_MacOSXContextImplementation.m 2011-10-05 19:19:00 UTC (rev 3649)
+++ trunk/LWJGL/src/native/macosx/org_lwjgl_opengl_MacOSXContextImplementation.m 2011-10-06 20:16:37 UTC (rev 3650)
@@ -38,6 +38,9 @@
*/
#import <jni.h>
+#import <OpenGL/CGLCurrent.h>
+#import <OpenGL/CGLTypes.h>
+#import <OpenGL/CGLDevice.h>
#import <Cocoa/Cocoa.h>
#import "org_lwjgl_opengl_MacOSXContextImplementation.h"
#import "context.h"
@@ -78,6 +81,16 @@
return context_handle;
}
+JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_MacOSXContextImplementation_getCGLShareGroup
+ (JNIEnv *env, jclass clazz, jobject context_handle) {
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ MacOSXContext *context_info = (MacOSXContext *)(*env)->GetDirectBufferAddress(env, context_handle);
+ CGLContextObj cgl_context = [context_info->context CGLContextObj];
+ CGLShareGroupObj share_group = CGLGetShareGroup(cgl_context);
+ [pool release];
+ return share_group;
+}
+
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_MacOSXContextImplementation_nSwapBuffers
(JNIEnv *env, jclass clazz, jobject context_handle) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|