summaryrefslogtreecommitdiffstats
path: root/src/jogl
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2009-07-04 02:51:49 +0000
committerSven Gothel <[email protected]>2009-07-04 02:51:49 +0000
commit918b42027e024f3b7973463a6391db8c11d5d778 (patch)
tree1e24caa96ac94d450595e1a5a58bd7eeccb0b2f7 /src/jogl
parent7dcb2b468ee7f3453fe69642e42cf4c2a21a0989 (diff)
Push custom loadLibrary handling down to NativeWindow NativeLibLoaderBase; X11AWTGLXGraphicsConfigurationFactory: Encapsule whole block in lock/unlock to minimize context switch
git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/trunk@2021 232f8b59-042b-4e1e-8c03-345bb8c30851
Diffstat (limited to 'src/jogl')
-rw-r--r--src/jogl/classes/com/sun/opengl/impl/NativeLibLoader.java80
-rw-r--r--src/jogl/classes/com/sun/opengl/impl/x11/glx/awt/X11AWTGLXGraphicsConfigurationFactory.java64
2 files changed, 34 insertions, 110 deletions
diff --git a/src/jogl/classes/com/sun/opengl/impl/NativeLibLoader.java b/src/jogl/classes/com/sun/opengl/impl/NativeLibLoader.java
index 5082f01dd..59f92e53f 100644
--- a/src/jogl/classes/com/sun/opengl/impl/NativeLibLoader.java
+++ b/src/jogl/classes/com/sun/opengl/impl/NativeLibLoader.java
@@ -49,8 +49,6 @@ import java.util.HashSet;
import com.sun.nativewindow.impl.NativeLibLoaderBase;
public class NativeLibLoader extends NativeLibLoaderBase {
- protected static final boolean DEBUG = Debug.debug("NativeLibLoader");
-
public static void loadNEWT() {
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
@@ -106,82 +104,6 @@ public class NativeLibLoader extends NativeLibLoaderBase {
});
}
- //----------------------------------------------------------------------
- // Support for the new JNLPAppletLauncher
- //
-
- private static class JOGLAction implements NativeLibLoaderBase.LoaderAction {
- public void loadLibrary(String libname, String[] preload,
- boolean preloadIgnoreError) {
- if (null!=preload) {
- for (int i=0; i<preload.length; i++) {
- if(!isLoaded(preload[i])) {
- try {
- if(DEBUG) {
- System.err.println("JOGL NativeLibLoader preload "+preload[i]);
- }
- loadLibraryInternal(preload[i]);
- addLoaded(preload[i]);
- }
- catch (UnsatisfiedLinkError e) {
- if(DEBUG) e.printStackTrace();
- if (!preloadIgnoreError && e.getMessage().indexOf("already loaded") < 0) {
- throw e;
- }
- }
- }
- }
- }
-
- if(DEBUG) {
- System.err.println("JOGL NativeLibLoader load "+libname);
- }
- loadLibraryInternal(libname);
- addLoaded(libname);
- }
- }
-
private static final String[] nativeOSPreload = { "nativewindow_x11" };
- private static boolean usingJNLPAppletLauncher;
- private static Method jnlpLoadLibraryMethod;
-
- static {
- NativeLibLoaderBase.setLoadingAction(new JOGLAction());
- String sunAppletLauncher = Debug.getProperty("sun.jnlp.applet.launcher", false);
- usingJNLPAppletLauncher = Boolean.valueOf(sunAppletLauncher).booleanValue();
- }
-
- // I hate the amount of delegation currently in this class
- private static void loadLibraryInternal(String libraryName) {
- // Note: special-casing JAWT which is built in to the JDK
- if (usingJNLPAppletLauncher && !libraryName.equals("jawt")) {
- try {
- if (jnlpLoadLibraryMethod == null) {
- Class jnlpAppletLauncherClass = Class.forName("org.jdesktop.applet.util.JNLPAppletLauncher");
- jnlpLoadLibraryMethod = jnlpAppletLauncherClass.getDeclaredMethod("loadLibrary", new Class[] { String.class });
- }
- jnlpLoadLibraryMethod.invoke(null, new Object[] { libraryName });
- } catch (Exception e) {
- Throwable t = e;
- if(DEBUG) t.printStackTrace();
- if (t instanceof InvocationTargetException) {
- t = ((InvocationTargetException) t).getTargetException();
- }
- if (t instanceof Error)
- throw (Error) t;
- if (t instanceof RuntimeException) {
- throw (RuntimeException) t;
- }
- // Throw UnsatisfiedLinkError for best compatibility with System.loadLibrary()
- throw (UnsatisfiedLinkError) new UnsatisfiedLinkError().initCause(e);
- }
- } else {
- // FIXME: remove
- // System.out.println("sun.boot.library.path=" + Debug.getProperty("sun.boot.library.path", false));
- System.loadLibrary(libraryName);
- if(DEBUG) {
- System.err.println("JOGL Loaded Native Library: "+libraryName);
- }
- }
- }
}
+
diff --git a/src/jogl/classes/com/sun/opengl/impl/x11/glx/awt/X11AWTGLXGraphicsConfigurationFactory.java b/src/jogl/classes/com/sun/opengl/impl/x11/glx/awt/X11AWTGLXGraphicsConfigurationFactory.java
index 604bde46b..1b92e6f86 100644
--- a/src/jogl/classes/com/sun/opengl/impl/x11/glx/awt/X11AWTGLXGraphicsConfigurationFactory.java
+++ b/src/jogl/classes/com/sun/opengl/impl/x11/glx/awt/X11AWTGLXGraphicsConfigurationFactory.java
@@ -84,8 +84,10 @@ public class X11AWTGLXGraphicsConfigurationFactory extends GraphicsConfiguration
System.err.println("X11AWTGLXGraphicsConfigurationFactory: got "+absScreen);
}
+ GraphicsConfiguration gc;
+ X11GraphicsConfiguration x11Config;
+
// Need the lock here, since it could be an AWT owned display connection
- X11GraphicsDevice x11Device;
NativeWindowFactory.getDefaultFactory().getToolkitLock().lock();
try {
long displayHandle = X11SunJDKReflection.graphicsDeviceGetDisplay(device);
@@ -100,42 +102,42 @@ public class X11AWTGLXGraphicsConfigurationFactory extends GraphicsConfiguration
}
}
((AWTGraphicsDevice)awtScreen.getDevice()).setHandle(displayHandle);
- x11Device = new X11GraphicsDevice(displayHandle);
- } finally {
- NativeWindowFactory.getDefaultFactory().getToolkitLock().unlock();
- }
+ X11GraphicsDevice x11Device = new X11GraphicsDevice(displayHandle);
- X11GraphicsScreen x11Screen = new X11GraphicsScreen(x11Device, awtScreen.getIndex());
- if(DEBUG) {
- System.err.println("X11AWTGLXGraphicsConfigurationFactory: made "+x11Screen);
- }
+ X11GraphicsScreen x11Screen = new X11GraphicsScreen(x11Device, awtScreen.getIndex());
+ if(DEBUG) {
+ System.err.println("X11AWTGLXGraphicsConfigurationFactory: made "+x11Screen);
+ }
- GraphicsConfiguration gc = device.getDefaultConfiguration();
- AWTGraphicsConfiguration.setupCapabilitiesRGBABits(capabilities, gc);
- if(DEBUG) {
- System.err.println("AWT Colormodel compatible: "+capabilities);
- }
+ gc = device.getDefaultConfiguration();
+ AWTGraphicsConfiguration.setupCapabilitiesRGBABits(capabilities, gc);
+ if(DEBUG) {
+ System.err.println("AWT Colormodel compatible: "+capabilities);
+ }
- X11GraphicsConfiguration x11Config = (X11GraphicsConfiguration)
- GraphicsConfigurationFactory.getFactory(x11Device).chooseGraphicsConfiguration(capabilities,
- chooser,
- x11Screen);
- if (x11Config == null) {
- throw new GLException("Unable to choose a GraphicsConfiguration: "+capabilities+",\n\t"+chooser+"\n\t"+x11Screen);
- }
+ x11Config = (X11GraphicsConfiguration)
+ GraphicsConfigurationFactory.getFactory(x11Device).chooseGraphicsConfiguration(capabilities,
+ chooser,
+ x11Screen);
+ if (x11Config == null) {
+ throw new GLException("Unable to choose a GraphicsConfiguration: "+capabilities+",\n\t"+chooser+"\n\t"+x11Screen);
+ }
- long visualID = x11Config.getVisualID();
- // Now figure out which GraphicsConfiguration corresponds to this
- // visual by matching the visual ID
- GraphicsConfiguration[] configs = device.getConfigurations();
- for (int i = 0; i < configs.length; i++) {
- GraphicsConfiguration config = configs[i];
- if (config != null) {
- if (X11SunJDKReflection.graphicsConfigurationGetVisualID(config) == visualID) {
- return new AWTGraphicsConfiguration(awtScreen, x11Config.getChosenCapabilities(), x11Config.getRequestedCapabilities(),
- config, x11Config);
+ long visualID = x11Config.getVisualID();
+ // Now figure out which GraphicsConfiguration corresponds to this
+ // visual by matching the visual ID
+ GraphicsConfiguration[] configs = device.getConfigurations();
+ for (int i = 0; i < configs.length; i++) {
+ GraphicsConfiguration config = configs[i];
+ if (config != null) {
+ if (X11SunJDKReflection.graphicsConfigurationGetVisualID(config) == visualID) {
+ return new AWTGraphicsConfiguration(awtScreen, x11Config.getChosenCapabilities(), x11Config.getRequestedCapabilities(),
+ config, x11Config);
+ }
}
}
+ } finally {
+ NativeWindowFactory.getDefaultFactory().getToolkitLock().unlock();
}
// Either we weren't able to reflectively introspect on the
// X11GraphicsConfig or something went wrong in the steps above;