summaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/jogamp/opengl
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2012-02-25 18:30:25 +0100
committerSven Gothel <[email protected]>2012-02-25 18:30:25 +0100
commitc3098619080d10e5bec8b52999117002b16f3ff5 (patch)
tree0be5c16d29a17010f8c2799fa2abfe54fb96b581 /src/jogl/classes/jogamp/opengl
parent24f66881aed6bf1f6b79fe6d14ef3fdc0e254fab (diff)
X11/GLX: Query X Server whether GLX is available (X11/SharedResourceRunner) ; Minor cleanups.
Before gathering GLX details and actually instantiate a X11/GLX shared resource, we shall query whether GLX is actually available. Since GLX availability is being queried on the server side, more changes are required for the X11GLX* impl, eg. not using X11GLXGraphicsConfigurationFactory and fall back to X11GraphicsConfigurationFactory.
Diffstat (limited to 'src/jogl/classes/jogamp/opengl')
-rw-r--r--src/jogl/classes/jogamp/opengl/SharedResourceRunner.java4
-rw-r--r--src/jogl/classes/jogamp/opengl/x11/glx/GLXUtil.java30
-rw-r--r--src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java5
3 files changed, 25 insertions, 14 deletions
diff --git a/src/jogl/classes/jogamp/opengl/SharedResourceRunner.java b/src/jogl/classes/jogamp/opengl/SharedResourceRunner.java
index a33e03a1a..0528d3060 100644
--- a/src/jogl/classes/jogamp/opengl/SharedResourceRunner.java
+++ b/src/jogl/classes/jogamp/opengl/SharedResourceRunner.java
@@ -260,7 +260,9 @@ public class SharedResourceRunner implements Runnable {
try {
sr = impl.createSharedResource(initConnection);
} catch (Exception e) {
- e.printStackTrace();
+ if(DEBUG) {
+ e.printStackTrace();
+ }
}
if (null != sr) {
impl.mapPut(initConnection, sr);
diff --git a/src/jogl/classes/jogamp/opengl/x11/glx/GLXUtil.java b/src/jogl/classes/jogamp/opengl/x11/glx/GLXUtil.java
index 33e85dd0b..8b90d6887 100644
--- a/src/jogl/classes/jogamp/opengl/x11/glx/GLXUtil.java
+++ b/src/jogl/classes/jogamp/opengl/x11/glx/GLXUtil.java
@@ -90,22 +90,29 @@ public class GLXUtil {
}
public static VersionNumber getClientVersionNumber() {
return clientVersionNumber;
- }
- public static synchronized boolean initGLXClientDataSingleton(X11GraphicsDevice x11Device) {
+ }
+
+ public static synchronized boolean isGLXAvailable(long handle) {
+ if(0 == handle) {
+ throw new IllegalArgumentException("null X11 display handle");
+ }
+ boolean glXAvailable = false;
+ try {
+ glXAvailable = GLX.glXQueryExtension(handle, null, 0, null, 0);
+ } catch (Throwable t) { /* n/a */ }
+ return glXAvailable;
+ }
+
+ public static synchronized void initGLXClientDataSingleton(X11GraphicsDevice x11Device) {
if(null != clientVendorName) {
- return false;
- }
- if(DEBUG) {
- System.err.println("initGLXClientDataSingleton: "+x11Device);
- Thread.dumpStack();
+ return; // already initialized
}
if(null == x11Device) {
- throw new GLException("null X11GraphicsDevice");
+ throw new IllegalArgumentException("null X11GraphicsDevice");
}
if(0 == x11Device.getHandle()) {
- throw new GLException("null X11GraphicsDevice display handle");
- }
-
+ throw new IllegalArgumentException("null X11GraphicsDevice display handle");
+ }
clientMultisampleAvailable = isMultisampleAvailable(GLX.glXGetClientString(x11Device.getHandle(), GLX.GLX_EXTENSIONS));
clientVendorName = GLX.glXGetClientString(x11Device.getHandle(), GLX.GLX_VENDOR);
@@ -121,7 +128,6 @@ public class GLXUtil {
minor[0] = 2;
}
clientVersionNumber = new VersionNumber(major[0], minor[0], 0);
- return true;
}
private static boolean clientMultisampleAvailable = false;
private static String clientVendorName = null;
diff --git a/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java b/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java
index 4f333406f..2ba067b02 100644
--- a/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java
+++ b/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java
@@ -103,7 +103,7 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl {
defaultDevice = new X11GraphicsDevice(X11Util.getNullDisplayName(), AbstractGraphicsDevice.DEFAULT_UNIT);
- if(null!=x11GLXDynamicLookupHelper) {
+ if(null!=x11GLXDynamicLookupHelper) {
// Register our GraphicsConfigurationFactory implementations
// The act of constructing them causes them to be registered
X11GLXGraphicsConfigurationFactory.registerFactory();
@@ -220,6 +220,9 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl {
// NativeWindowFactory.getNullToolkitLock(), true); // own non-shared display connection, no locking
sharedDevice.lock();
try {
+ if(!GLXUtil.isGLXAvailable(sharedDevice.getHandle())) {
+ throw new GLException("GLX not available on device: "+sharedDevice);
+ }
GLXUtil.initGLXClientDataSingleton(sharedDevice);
final String glXServerVendorName = GLX.glXQueryServerString(sharedDevice.getHandle(), 0, GLX.GLX_VENDOR);
final VersionNumber glXServerVersion = GLXUtil.getGLXServerVersionNumber(sharedDevice.getHandle());