From: <ka...@us...> - 2012-03-04 03:40:39
|
Revision: 3748 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3748&view=rev Author: kappa1 Date: 2012-03-04 03:40:32 +0000 (Sun, 04 Mar 2012) Log Message: ----------- Implement GLX_EXT_swap_control for Linux Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/ContextGL.java trunk/LWJGL/src/java/org/lwjgl/opengl/ContextImplementation.java trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxContextImplementation.java trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXContextImplementation.java trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsContextImplementation.java trunk/LWJGL/src/native/linux/opengl/extgl_glx.c trunk/LWJGL/src/native/linux/opengl/extgl_glx.h trunk/LWJGL/src/native/linux/opengl/org_lwjgl_opengl_LinuxContextImplementation.c Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/ContextGL.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/ContextGL.java 2012-03-01 22:34:34 UTC (rev 3747) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/ContextGL.java 2012-03-04 03:40:32 UTC (rev 3748) @@ -64,7 +64,7 @@ /** Handle to the native GL rendering context */ private final ByteBuffer handle; - private final PeerInfo peer_info; + private static PeerInfo peer_info; private final ContextAttribs contextAttribs; private final boolean forwardCompatible; @@ -229,7 +229,7 @@ * A video frame period is the time required to display a full frame of video data. */ public static void setSwapInterval(int value) { - implementation.setSwapInterval(value); + implementation.setSwapInterval(peer_info, value); } /** Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/ContextImplementation.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/ContextImplementation.java 2012-03-01 22:34:34 UTC (rev 3747) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/ContextImplementation.java 2012-03-04 03:40:32 UTC (rev 3748) @@ -81,7 +81,7 @@ */ boolean isCurrent(ByteBuffer handle) throws LWJGLException; - void setSwapInterval(int value); + void setSwapInterval(PeerInfo peer_info, int value); /** * Destroys the Context. Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxContextImplementation.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxContextImplementation.java 2012-03-01 22:34:34 UTC (rev 3747) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxContextImplementation.java 2012-03-04 03:40:32 UTC (rev 3748) @@ -141,18 +141,29 @@ private static native boolean nIsCurrent(ByteBuffer context_handle) throws LWJGLException; - public void setSwapInterval(int value) { + public void setSwapInterval(PeerInfo peer_info, int value) { ContextGL current_context = ContextGL.getCurrentContext(); if ( current_context == null ) throw new IllegalStateException("No context is current"); synchronized ( current_context ) { LinuxDisplay.lockAWT(); - nSetSwapInterval(current_context.getHandle(), value); - LinuxDisplay.unlockAWT(); + try { + ByteBuffer peer_handle = peer_info.lockAndGetHandle(); + try { + nSetSwapInterval(peer_handle, current_context.getHandle(), value); + } finally { + peer_info.unlock(); + } + } catch (LWJGLException e) { + // API CHANGE - this methods should throw LWJGLException + e.printStackTrace(); + } finally { + LinuxDisplay.unlockAWT(); + } } } - private static native void nSetSwapInterval(ByteBuffer context_handle, int value); + private static native void nSetSwapInterval(ByteBuffer peer_handle, ByteBuffer context_handle, int value); public void destroy(PeerInfo peer_info, ByteBuffer handle) throws LWJGLException { LinuxDisplay.lockAWT(); Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXContextImplementation.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXContextImplementation.java 2012-03-01 22:34:34 UTC (rev 3747) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXContextImplementation.java 2012-03-04 03:40:32 UTC (rev 3748) @@ -118,7 +118,7 @@ private static native boolean nIsCurrent(ByteBuffer context_handle) throws LWJGLException; - public void setSwapInterval(int value) { + public void setSwapInterval(PeerInfo peer_info, int value) { ContextGL current_context = ContextGL.getCurrentContext(); synchronized ( current_context ) { nSetSwapInterval(current_context.getHandle(), value); Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsContextImplementation.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsContextImplementation.java 2012-03-01 22:34:34 UTC (rev 3747) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsContextImplementation.java 2012-03-04 03:40:32 UTC (rev 3748) @@ -106,7 +106,7 @@ private static native boolean nIsCurrent(ByteBuffer context_handle) throws LWJGLException; - public void setSwapInterval(int value) { + public void setSwapInterval(PeerInfo peer_info, int value) { boolean success = nSetSwapInterval(value); if ( !success ) LWJGLUtil.log("Failed to set swap interval"); Modified: trunk/LWJGL/src/native/linux/opengl/extgl_glx.c =================================================================== --- trunk/LWJGL/src/native/linux/opengl/extgl_glx.c 2012-03-01 22:34:34 UTC (rev 3747) +++ trunk/LWJGL/src/native/linux/opengl/extgl_glx.c 2012-03-04 03:40:32 UTC (rev 3748) @@ -74,6 +74,9 @@ /* GLX_SGI_swap_control */ glXSwapIntervalSGIPROC lwjgl_glXSwapIntervalSGI = NULL; +/* GLX_EXT_swap_control */ +glXSwapIntervalEXTPROC lwjgl_glXSwapIntervalEXT = NULL; + /* GLX_ARB_create_context */ glXCreateContextAttribsARBPROC lwjgl_glXCreateContextAttribsARB = NULL; @@ -155,6 +158,12 @@ symbols_flags.GLX_SGI_swap_control = extgl_InitializeFunctions(sizeof(functions)/sizeof(ExtFunction), functions); } +static void extgl_InitGLXEXTSwapControl() { + ExtFunction functions[] = { + {"glXSwapIntervalEXT", (void*)&lwjgl_glXSwapIntervalEXT}}; + symbols_flags.GLX_EXT_swap_control = extgl_InitializeFunctions(sizeof(functions)/sizeof(ExtFunction), functions); +} + static void extgl_InitGLXARBCreateContext() { ExtFunction functions[] = { {"glXCreateContextAttribsARB", (void*)&lwjgl_glXCreateContextAttribsARB}}; @@ -189,6 +198,7 @@ /* extension_flags.GLX_EXT_visual_info = GLXQueryExtension(serverExts, clientExts, "GLX_EXT_visual_info"); extension_flags.GLX_EXT_visual_rating = GLXQueryExtension(serverExts, clientExts, "GLX_EXT_visual_rating");*/ extension_flags->GLX_SGI_swap_control = symbols_flags.GLX_SGI_swap_control && GLXQueryExtension(serverExts, clientExts, "GLX_SGI_swap_control"); + extension_flags->GLX_EXT_swap_control = symbols_flags.GLX_EXT_swap_control && GLXQueryExtension(serverExts, clientExts, "GLX_EXT_swap_control"); extension_flags->GLX_ARB_multisample = GLXQueryExtension(serverExts, clientExts, "GLX_ARB_multisample"); extension_flags->GLX_ARB_fbconfig_float = GLXQueryExtension(serverExts, clientExts, "GLX_ARB_fbconfig_float"); extension_flags->GLX_EXT_fbconfig_packed_float = GLXQueryExtension(serverExts, clientExts, "GLX_EXT_fbconfig_packed_float"); Modified: trunk/LWJGL/src/native/linux/opengl/extgl_glx.h =================================================================== --- trunk/LWJGL/src/native/linux/opengl/extgl_glx.h 2012-03-01 22:34:34 UTC (rev 3747) +++ trunk/LWJGL/src/native/linux/opengl/extgl_glx.h 2012-03-04 03:40:32 UTC (rev 3748) @@ -343,6 +343,9 @@ /* GLX_SGI_swap_control */ typedef void (APIENTRY * glXSwapIntervalSGIPROC)(int interval); +/* GLX_EXT_swap_control */ +typedef void (APIENTRY * glXSwapIntervalEXTPROC)(Display *dpy, GLXDrawable drawable, int interval); + /* GLX_ARB_create_context */ typedef GLXContext (APIENTRY * glXCreateContextAttribsARBPROC) (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list); @@ -365,6 +368,7 @@ /* bool GLX_EXT_visual_info; bool GLX_EXT_visual_rating;*/ bool GLX_SGI_swap_control; + bool GLX_EXT_swap_control; bool GLX_ARB_multisample; bool GLX_ARB_fbconfig_float; bool GLX_EXT_fbconfig_packed_float; Modified: trunk/LWJGL/src/native/linux/opengl/org_lwjgl_opengl_LinuxContextImplementation.c =================================================================== --- trunk/LWJGL/src/native/linux/opengl/org_lwjgl_opengl_LinuxContextImplementation.c 2012-03-01 22:34:34 UTC (rev 3747) +++ trunk/LWJGL/src/native/linux/opengl/org_lwjgl_opengl_LinuxContextImplementation.c 2012-03-04 03:40:32 UTC (rev 3748) @@ -117,10 +117,15 @@ } JNIEXPORT void JNICALL Java_org_lwjgl_opengl_LinuxContextImplementation_nSetSwapInterval - (JNIEnv *env, jclass clazz, jobject context_handle, jint value) + (JNIEnv *env, jclass clazz, jobject peer_info_handle, jobject context_handle, jint value) { + X11PeerInfo *peer_info = (*env)->GetDirectBufferAddress(env, peer_info_handle); X11Context *context_info = (*env)->GetDirectBufferAddress(env, context_handle); - if (context_info->extension_flags.GLX_SGI_swap_control) { + + if (context_info->extension_flags.GLX_EXT_swap_control) { + lwjgl_glXSwapIntervalEXT(peer_info->display, peer_info->drawable, value); + } + else if (context_info->extension_flags.GLX_SGI_swap_control) { lwjgl_glXSwapIntervalSGI(value); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |