aboutsummaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/com/jogamp/opengl/impl
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2010-04-27 07:18:54 +0200
committerSven Gothel <[email protected]>2010-04-27 07:18:54 +0200
commitd370be30dc75cc3b63246f026090a7377bf07135 (patch)
tree1de511925eefc2f7237d0551fae1e3e417f55805 /src/jogl/classes/com/jogamp/opengl/impl
parentedaf669e1b8c8412c1fd4acfc799138b629bf031 (diff)
- Fix GLProcAddressResolver regression: Use GLProcAddressResolver !
- X11GLXDrawableFactory: - Move shared resource creation/destruction into it's own thread - Remove the ATI hack (no XDisplay closing) for every Display, this is only necessary for the shared XDisplay and in case of AWT. - Newt - Display: Only pumpMessages if device is ready. - X11Display: Verify handle not null at DispatchMessage. - Common recursive ToolkitLock implementation, from src/nativewindow/classes/com/jogamp/nativewindow/impl/LockingNativeWindowFactory.java and src/newt/classes/com/jogamp/newt/Window.java, -> com.jogamp.nativewindow.impl.RecursiveToolkitLock - Unique XLockDisplay/XUnlockDisplay call via X11Util to simplify debugging. X11Util: Added debug code for XLockDisplay/XUnlockDisplay. Added fast LongObjectHashMap Added static lib loading and initialization. Removed active and passive list, as well as unused methods, to easy maintenance. Possible since the only 'uncloseable' Display might be the shareable one. - X11Lib: Added static initialization via X11Util Test: junit/com/jogamp/test/junit/jogl/demos/gl2/gears/TestGears* - Add WindowListener for quit ..
Diffstat (limited to 'src/jogl/classes/com/jogamp/opengl/impl')
-rw-r--r--src/jogl/classes/com/jogamp/opengl/impl/GLContextImpl.java4
-rwxr-xr-xsrc/jogl/classes/com/jogamp/opengl/impl/egl/EGLContext.java3
-rw-r--r--src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/MacOSXCGLContext.java3
-rw-r--r--src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLContext.java3
-rw-r--r--src/jogl/classes/com/jogamp/opengl/impl/x11/glx/GLXUtil.java8
-rw-r--r--src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11DummyGLXDrawable.java4
-rw-r--r--src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXContext.java8
-rw-r--r--src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXDrawableFactory.java164
-rw-r--r--src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXGraphicsConfigurationFactory.java12
-rw-r--r--src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11OffscreenGLXDrawable.java8
10 files changed, 147 insertions, 70 deletions
diff --git a/src/jogl/classes/com/jogamp/opengl/impl/GLContextImpl.java b/src/jogl/classes/com/jogamp/opengl/impl/GLContextImpl.java
index 4f208ee85..826523a5c 100644
--- a/src/jogl/classes/com/jogamp/opengl/impl/GLContextImpl.java
+++ b/src/jogl/classes/com/jogamp/opengl/impl/GLContextImpl.java
@@ -732,7 +732,9 @@ public abstract class GLContextImpl extends GLContext {
System.err.println(getThreadName() + ": !!! Initializing OpenGL extension address table for " + this);
}
if (glProcAddressTable == null) {
- glProcAddressTable = (ProcAddressTable) createInstance(gl.getGLProfile(), "ProcAddressTable", new Class[0], null);
+ glProcAddressTable = (ProcAddressTable) createInstance(gl.getGLProfile(), "ProcAddressTable",
+ new Class[] { FunctionAddressResolver.class } ,
+ new Object[] { new GLProcAddressResolver() } );
// FIXME: cache ProcAddressTables by capability bits so we can
// share them among contexts with the same capabilities
}
diff --git a/src/jogl/classes/com/jogamp/opengl/impl/egl/EGLContext.java b/src/jogl/classes/com/jogamp/opengl/impl/egl/EGLContext.java
index 48f80977c..12d713036 100755
--- a/src/jogl/classes/com/jogamp/opengl/impl/egl/EGLContext.java
+++ b/src/jogl/classes/com/jogamp/opengl/impl/egl/EGLContext.java
@@ -39,6 +39,7 @@ import javax.media.nativewindow.*;
import javax.media.opengl.*;
import com.jogamp.opengl.impl.*;
import com.jogamp.gluegen.runtime.ProcAddressTable;
+import com.jogamp.gluegen.runtime.opengl.GLProcAddressResolver;
import java.nio.*;
import java.util.*;
@@ -239,7 +240,7 @@ public abstract class EGLContext extends GLContextImpl {
if (eglExtProcAddressTable == null) {
// FIXME: cache ProcAddressTables by capability bits so we can
// share them among contexts with the same capabilities
- eglExtProcAddressTable = new EGLExtProcAddressTable();
+ eglExtProcAddressTable = new EGLExtProcAddressTable(new GLProcAddressResolver());
}
resetProcAddressTable(getEGLExtProcAddressTable());
super.updateGLProcAddressTable(major, minor, ctp);
diff --git a/src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/MacOSXCGLContext.java b/src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/MacOSXCGLContext.java
index ebefaf466..77cd21730 100644
--- a/src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/MacOSXCGLContext.java
+++ b/src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/MacOSXCGLContext.java
@@ -45,6 +45,7 @@ import javax.media.opengl.*;
import javax.media.nativewindow.*;
import com.jogamp.opengl.impl.*;
import com.jogamp.gluegen.runtime.ProcAddressTable;
+import com.jogamp.gluegen.runtime.opengl.GLProcAddressResolver;
public abstract class MacOSXCGLContext extends GLContextImpl
{
@@ -262,7 +263,7 @@ public abstract class MacOSXCGLContext extends GLContextImpl
if (cglExtProcAddressTable == null) {
// FIXME: cache ProcAddressTables by capability bits so we can
// share them among contexts with the same capabilities
- cglExtProcAddressTable = new CGLExtProcAddressTable();
+ cglExtProcAddressTable = new CGLExtProcAddressTable(new GLProcAddressResolver());
}
resetProcAddressTable(getCGLExtProcAddressTable());
super.updateGLProcAddressTable(major, minor, ctp);
diff --git a/src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLContext.java b/src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLContext.java
index 0f1f9813f..360bddd74 100644
--- a/src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLContext.java
+++ b/src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLContext.java
@@ -45,6 +45,7 @@ import javax.media.opengl.*;
import javax.media.nativewindow.*;
import com.jogamp.opengl.impl.*;
import com.jogamp.gluegen.runtime.ProcAddressTable;
+import com.jogamp.gluegen.runtime.opengl.GLProcAddressResolver;
public class WindowsWGLContext extends GLContextImpl {
protected long hglrc;
@@ -384,7 +385,7 @@ public class WindowsWGLContext extends GLContextImpl {
if (wglExtProcAddressTable == null) {
// FIXME: cache ProcAddressTables by capability bits so we can
// share them among contexts with the same capabilities
- wglExtProcAddressTable = new WGLExtProcAddressTable();
+ wglExtProcAddressTable = new WGLExtProcAddressTable(new GLProcAddressResolver());
}
resetProcAddressTable(getWGLExtProcAddressTable());
super.updateGLProcAddressTable(major, minor, ctp);
diff --git a/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/GLXUtil.java b/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/GLXUtil.java
index ec0eaf94f..804a262fe 100644
--- a/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/GLXUtil.java
+++ b/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/GLXUtil.java
@@ -38,7 +38,7 @@ import com.jogamp.nativewindow.impl.x11.*;
public class GLXUtil {
public static boolean isMultisampleAvailable(long display) {
- X11Lib.XLockDisplay(display);
+ X11Util.XLockDisplay(display);
try {
String exts = GLX.glXGetClientString(display, GLX.GLX_EXTENSIONS);
if (exts != null) {
@@ -46,18 +46,18 @@ public class GLXUtil {
}
return false;
} finally {
- X11Lib.XUnlockDisplay(display);
+ X11Util.XUnlockDisplay(display);
}
}
/** Workaround for apparent issue with ATI's proprietary drivers
where direct contexts still send GLX tokens for GL calls */
public static String getVendorName(long display) {
- X11Lib.XLockDisplay(display);
+ X11Util.XLockDisplay(display);
try {
return GLX.glXGetClientString(display, GLX.GLX_VENDOR);
} finally {
- X11Lib.XUnlockDisplay(display);
+ X11Util.XUnlockDisplay(display);
}
}
diff --git a/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11DummyGLXDrawable.java b/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11DummyGLXDrawable.java
index 1f148bead..03783f3b9 100644
--- a/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11DummyGLXDrawable.java
+++ b/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11DummyGLXDrawable.java
@@ -64,11 +64,11 @@ public class X11DummyGLXDrawable extends X11OnscreenGLXDrawable {
int scrn = screen.getIndex();
long visualID = config.getVisualID();
- X11Lib.XLockDisplay(dpy);
+ X11Util.XLockDisplay(dpy);
try{
dummyWindow = X11Lib.CreateDummyWindow(dpy, scrn, visualID);
} finally {
- X11Lib.XUnlockDisplay(dpy);
+ X11Util.XUnlockDisplay(dpy);
}
nw.setSurfaceHandle( dummyWindow );
}
diff --git a/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXContext.java b/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXContext.java
index dce25978c..241c956dc 100644
--- a/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXContext.java
+++ b/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXContext.java
@@ -48,6 +48,7 @@ import com.jogamp.opengl.impl.*;
import com.jogamp.opengl.impl.x11.glx.*;
import com.jogamp.nativewindow.impl.x11.*;
import com.jogamp.gluegen.runtime.ProcAddressTable;
+import com.jogamp.gluegen.runtime.opengl.GLProcAddressResolver;
public abstract class X11GLXContext extends GLContextImpl {
protected long context;
@@ -407,13 +408,14 @@ public abstract class X11GLXContext extends GLContextImpl {
}
protected void releaseImplAfterLock() throws GLException {
- getDrawableImpl().getFactoryImpl().lockToolkit();
+ X11GLXDrawableFactory factory = (X11GLXDrawableFactory)drawable.getFactoryImpl();
+ factory.lockToolkit();
try {
if (!glXMakeContextCurrent(drawable.getNativeWindow().getDisplayHandle(), 0, 0, 0)) {
throw new GLException("Error freeing OpenGL context");
}
} finally {
- getDrawableImpl().getFactoryImpl().unlockToolkit();
+ factory.unlockToolkit();
}
}
@@ -474,7 +476,7 @@ public abstract class X11GLXContext extends GLContextImpl {
if (glXExtProcAddressTable == null) {
// FIXME: cache ProcAddressTables by capability bits so we can
// share them among contexts with the same capabilities
- glXExtProcAddressTable = new GLXExtProcAddressTable();
+ glXExtProcAddressTable = new GLXExtProcAddressTable(new GLProcAddressResolver());
}
resetProcAddressTable(getGLXExtProcAddressTable());
super.updateGLProcAddressTable(major, minor, ctp);
diff --git a/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXDrawableFactory.java b/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXDrawableFactory.java
index 5e1a5da3a..b544404ad 100644
--- a/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXDrawableFactory.java
+++ b/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXDrawableFactory.java
@@ -50,6 +50,10 @@ import com.jogamp.nativewindow.impl.x11.*;
public class X11GLXDrawableFactory extends GLDrawableFactoryImpl implements DynamicLookupHelper {
+ static {
+ X11Util.initSingleton(); // ensure it's loaded and setup
+ }
+
public X11GLXDrawableFactory() {
super();
// Must initialize GLX support eagerly in case a pbuffer is the
@@ -63,26 +67,33 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl implements Dyna
new Object[] {});
} catch (JogampRuntimeException jre) { /* n/a .. */ }
- X11GraphicsDevice sharedDevice = new X11GraphicsDevice(X11Util.createThreadLocalDisplay(null));
- vendorName = GLXUtil.getVendorName(sharedDevice.getHandle());
- isVendorATI = GLXUtil.isVendorATI(vendorName);
- isVendorNVIDIA = GLXUtil.isVendorNVIDIA(vendorName);
- if( isVendorATI() ) {
- X11Util.markGlobalDisplayUndeletable(sharedDevice.getHandle()); // ATI hack ..
+ shareableResourceThread = new ShareableResourceThread(GLProfile.getDefault(), GLProfile.isAWTJOGLAvailable());
+ shareableResourceThread.start();
+ while (!shareableResourceThread.isInitialized()) {
+ synchronized(shareableResourceThread) {
+ try {
+ shareableResourceThread.wait();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
}
- sharedScreen = new X11GraphicsScreen(sharedDevice, 0);
- X11Lib.XLockDisplay(sharedScreen.getDevice().getHandle());
+ if(null==sharedScreen || null==sharedDrawable) {
+ throw new GLException("Couldn't init shared screen("+sharedScreen+")/drawable("+sharedDrawable+")");
+ }
+ // We have to keep this within this thread,
+ // since we have a 'chicken-and-egg' problem otherwise on the <init> lock of this thread.
+ X11Util.XLockDisplay(sharedScreen.getDevice().getHandle());
try{
- sharedDrawable = new X11DummyGLXDrawable(sharedScreen, this, null);
X11GLXContext ctx = (X11GLXContext) sharedDrawable.createContext(null);
ctx.makeCurrent();
ctx.release();
sharedContext = ctx;
- }finally{
- X11Lib.XUnlockDisplay(sharedScreen.getDevice().getHandle());
+ } finally {
+ X11Util.XUnlockDisplay(sharedScreen.getDevice().getHandle());
}
if(null==sharedContext) {
- throw new GLException("Couldn't init shared resources");
+ throw new GLException("Couldn't init shared context");
}
if (DEBUG) {
System.err.println("!!! Vendor: "+vendorName+", ATI: "+isVendorATI+", NV: "+isVendorNVIDIA);
@@ -91,6 +102,71 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl implements Dyna
}
}
+ ShareableResourceThread shareableResourceThread;
+
+ class ShareableResourceThread extends Thread {
+ volatile boolean shutdown = false;
+ volatile boolean initialized = false;
+ GLProfile glp;
+ boolean mayUseAWT;
+
+ final void shutdown() { shutdown = true; }
+ final boolean isInitialized() { return initialized; }
+
+ public ShareableResourceThread(GLProfile glp, boolean mayUseAWT) {
+ super("ShareableResourceThread-"+Thread.currentThread().getName());
+ this.glp = glp;
+ this.mayUseAWT = mayUseAWT;
+ }
+
+ public void run() {
+ synchronized(this) {
+ long tlsDisplay = X11Util.createThreadLocalDisplay(null);
+ X11GraphicsDevice sharedDevice = new X11GraphicsDevice(tlsDisplay);
+ vendorName = GLXUtil.getVendorName(sharedDevice.getHandle());
+ isVendorATI = GLXUtil.isVendorATI(vendorName);
+ isVendorNVIDIA = GLXUtil.isVendorNVIDIA(vendorName);
+ sharedScreen = new X11GraphicsScreen(sharedDevice, 0);
+ X11Util.XLockDisplay(sharedScreen.getDevice().getHandle());
+ try{
+ sharedDrawable = new X11DummyGLXDrawable(sharedScreen, X11GLXDrawableFactory.this, glp);
+ } finally {
+ X11Util.XUnlockDisplay(sharedScreen.getDevice().getHandle());
+ }
+ if(isVendorATI() && mayUseAWT) {
+ X11Util.markThreadLocalDisplayUncloseable(tlsDisplay); // failure to close with ATI and AWT usage
+ }
+ initialized = true;
+ this.notifyAll();
+
+ while (!shutdown) {
+ synchronized(this) {
+ try {
+ this.wait();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ if(null!=sharedDrawable) {
+ sharedDrawable.destroy();
+ sharedDrawable=null;
+ }
+ if(null!=sharedScreen) {
+ X11Util.closeThreadLocalDisplay(null);
+ sharedScreen = null;
+ sharedDevice=null;
+ }
+ // don't close pending XDisplay, since they might be a different thread as the opener
+ X11Util.shutdown( false, DEBUG );
+
+ initialized = false;
+ this.notifyAll();
+ }
+ }
+ }
+
private X11GraphicsScreen sharedScreen;
private String vendorName;
private boolean isVendorATI;
@@ -112,36 +188,36 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl implements Dyna
}
protected void shutdown() {
- if (DEBUG) {
+ if (DEBUG) {
System.err.println("!!! Shutdown Shared:");
System.err.println("!!! CTX : "+sharedContext);
System.err.println("!!! Drawable: "+sharedDrawable);
System.err.println("!!! Screen : "+sharedScreen);
- Exception e = new Exception("Debug");
- e.printStackTrace();
- }
- if(null!=sharedContext) {
+ }
+ if(null!=sharedContext) {
sharedContext.destroy(); // implies release, if current
- }
- if(null!=sharedDrawable) {
- sharedDrawable.destroy();
- }
- if(null!=sharedScreen) {
- X11GraphicsDevice sharedDevice = (X11GraphicsDevice) sharedScreen.getDevice();
- sharedScreen = null;
- }
- // X11Util.shutdown( !isVendorATI(), DEBUG ); // works NV .. but ..
- // X11Util.shutdown( true, DEBUG ); // fails ATI, works NV .. but
- X11Util.shutdown( false, DEBUG );
+ sharedContext=null;
+ }
+ synchronized(shareableResourceThread) {
+ if (shareableResourceThread.isInitialized()) {
+ shareableResourceThread.shutdown();
+ shareableResourceThread.notifyAll();
+ while (shareableResourceThread.isInitialized()) {
+ try {
+ shareableResourceThread.wait();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ shareableResourceThread = null;
}
public GLDrawableImpl createOnscreenDrawable(NativeWindow target) {
if (target == null) {
throw new IllegalArgumentException("Null target");
}
- if( isVendorATI() ) {
- X11Util.markGlobalDisplayUndeletable(target.getDisplayHandle()); // ATI hack ..
- }
return new X11OnscreenGLXDrawable(this, target);
}
@@ -149,9 +225,6 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl implements Dyna
if (target == null) {
throw new IllegalArgumentException("Null target");
}
- if( isVendorATI() ) {
- X11Util.markGlobalDisplayUndeletable(target.getDisplayHandle()); // ATI hack ..
- }
return new X11OffscreenGLXDrawable(this, target);
}
@@ -204,9 +277,6 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl implements Dyna
sharedContext.makeCurrent();
usedSharedContext=true;
}
- if( isVendorATI() ) {
- X11Util.markGlobalDisplayUndeletable(target.getDisplayHandle()); // ATI hack ..
- }
try {
pbufferDrawable = new X11PbufferGLXDrawable(this, target);
} finally {
@@ -220,11 +290,11 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl implements Dyna
protected NativeWindow createOffscreenWindow(GLCapabilities capabilities, GLCapabilitiesChooser chooser, int width, int height) {
NullWindow nw = null;
- X11Lib.XLockDisplay(sharedScreen.getDevice().getHandle());
+ X11Util.XLockDisplay(sharedScreen.getDevice().getHandle());
try{
nw = new NullWindow(X11GLXGraphicsConfigurationFactory.chooseGraphicsConfigurationStatic(capabilities, chooser, sharedScreen));
}finally{
- X11Lib.XUnlockDisplay(sharedScreen.getDevice().getHandle());
+ X11Util.XUnlockDisplay(sharedScreen.getDevice().getHandle());
}
if(nw != null) {
nw.setSize(width, height);
@@ -280,7 +350,7 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl implements Dyna
long display = sharedScreen.getDevice().getHandle();
- X11Lib.XLockDisplay(display);
+ X11Util.XLockDisplay(display);
try {
int[] size = new int[1];
boolean res = X11Lib.XF86VidModeGetGammaRampSize(display,
@@ -293,7 +363,7 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl implements Dyna
gammaRampLength = size[0];
return gammaRampLength;
} finally {
- X11Lib.XUnlockDisplay(display);
+ X11Util.XUnlockDisplay(display);
}
}
@@ -305,7 +375,7 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl implements Dyna
}
long display = sharedScreen.getDevice().getHandle();
- X11Lib.XLockDisplay(display);
+ X11Util.XLockDisplay(display);
try {
boolean res = X11Lib.XF86VidModeSetGammaRamp(display,
X11Lib.DefaultScreen(display),
@@ -315,7 +385,7 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl implements Dyna
rampData, 0);
return res;
} finally {
- X11Lib.XUnlockDisplay(display);
+ X11Util.XUnlockDisplay(display);
}
}
@@ -332,7 +402,7 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl implements Dyna
rampData.limit(3 * size);
ShortBuffer blueRampData = rampData.slice();
long display = sharedScreen.getDevice().getHandle();
- X11Lib.XLockDisplay(display);
+ X11Util.XLockDisplay(display);
try {
boolean res = X11Lib.XF86VidModeGetGammaRamp(display,
X11Lib.DefaultScreen(display),
@@ -345,7 +415,7 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl implements Dyna
}
return rampData;
} finally {
- X11Lib.XUnlockDisplay(display);
+ X11Util.XUnlockDisplay(display);
}
}
@@ -368,7 +438,7 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl implements Dyna
rampData.limit(3 * size);
ShortBuffer blueRampData = rampData.slice();
long display = sharedScreen.getDevice().getHandle();
- X11Lib.XLockDisplay(display);
+ X11Util.XLockDisplay(display);
try {
X11Lib.XF86VidModeSetGammaRamp(display,
X11Lib.DefaultScreen(display),
@@ -377,7 +447,7 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl implements Dyna
greenRampData,
blueRampData);
} finally {
- X11Lib.XUnlockDisplay(display);
+ X11Util.XUnlockDisplay(display);
}
}
}
diff --git a/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXGraphicsConfigurationFactory.java b/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXGraphicsConfigurationFactory.java
index e65fb5e90..a160734d3 100644
--- a/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXGraphicsConfigurationFactory.java
+++ b/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXGraphicsConfigurationFactory.java
@@ -81,7 +81,7 @@ public class X11GLXGraphicsConfigurationFactory extends GraphicsConfigurationFac
long display = x11Screen.getDevice().getHandle();
NativeWindowFactory.getDefaultFactory().getToolkitLock().lock();
- X11Lib.XLockDisplay(display);
+ X11Util.XLockDisplay(display);
try {
int screen = x11Screen.getIndex();
boolean isMultisampleAvailable = GLXUtil.isMultisampleAvailable(display);
@@ -107,7 +107,7 @@ public class X11GLXGraphicsConfigurationFactory extends GraphicsConfigurationFac
}
} catch (Throwable t) {
} finally {
- X11Lib.XUnlockDisplay(display);
+ X11Util.XUnlockDisplay(display);
NativeWindowFactory.getDefaultFactory().getToolkitLock().unlock();
}
@@ -191,7 +191,7 @@ public class X11GLXGraphicsConfigurationFactory extends GraphicsConfigurationFac
NativeWindowFactory.getDefaultFactory().getToolkitLock().lock();
try {
- X11Lib.XLockDisplay(display);
+ X11Util.XLockDisplay(display);
try{
int screen = x11Screen.getIndex();
boolean isMultisampleAvailable = GLXUtil.isMultisampleAvailable(display);
@@ -292,7 +292,7 @@ public class X11GLXGraphicsConfigurationFactory extends GraphicsConfigurationFac
}
}
}finally{
- X11Lib.XUnlockDisplay(display);
+ X11Util.XUnlockDisplay(display);
}
} finally {
NativeWindowFactory.getDefaultFactory().getToolkitLock().unlock();
@@ -324,7 +324,7 @@ public class X11GLXGraphicsConfigurationFactory extends GraphicsConfigurationFac
NativeWindowFactory.getDefaultFactory().getToolkitLock().lock();
try {
- X11Lib.XLockDisplay(display);
+ X11Util.XLockDisplay(display);
try{
int screen = x11Screen.getIndex();
boolean isMultisampleAvailable = GLXUtil.isMultisampleAvailable(display);
@@ -377,7 +377,7 @@ public class X11GLXGraphicsConfigurationFactory extends GraphicsConfigurationFac
}
retXVisualInfo = XVisualInfo.create(infos[chosen]);
}finally{
- X11Lib.XUnlockDisplay(display);
+ X11Util.XUnlockDisplay(display);
}
} finally {
NativeWindowFactory.getDefaultFactory().getToolkitLock().unlock();
diff --git a/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11OffscreenGLXDrawable.java b/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11OffscreenGLXDrawable.java
index 14d07e74f..5771e9c42 100644
--- a/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11OffscreenGLXDrawable.java
+++ b/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11OffscreenGLXDrawable.java
@@ -75,7 +75,7 @@ public class X11OffscreenGLXDrawable extends X11GLXDrawable {
getFactoryImpl().lockToolkit();
try {
- X11Lib.XLockDisplay(dpy);
+ X11Util.XLockDisplay(dpy);
try{
pixmap = X11Lib.XCreatePixmap(dpy, X11Lib.RootWindow(dpy, screen),
@@ -96,7 +96,7 @@ public class X11OffscreenGLXDrawable extends X11GLXDrawable {
", display " + toHexString(dpy));
}
}finally{
- X11Lib.XUnlockDisplay(dpy);
+ X11Util.XUnlockDisplay(dpy);
}
} finally {
getFactoryImpl().unlockToolkit();
@@ -111,7 +111,7 @@ public class X11OffscreenGLXDrawable extends X11GLXDrawable {
getFactoryImpl().lockToolkit();
try {
- X11Lib.XLockDisplay(display);
+ X11Util.XLockDisplay(display);
try{
long drawable = nw.getSurfaceHandle();
if (DEBUG) {
@@ -142,7 +142,7 @@ public class X11OffscreenGLXDrawable extends X11GLXDrawable {
((SurfaceChangeable)nw).setSurfaceHandle(0);
}finally{
- X11Lib.XUnlockDisplay(display);
+ X11Util.XUnlockDisplay(display);
}
} finally {
getFactoryImpl().unlockToolkit();