summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2009-03-16 14:38:27 +0000
committerSven Gothel <[email protected]>2010-04-19 00:56:20 +0200
commit3a24c4dc83fefb51724b0c8d98b4fbc5a26c5be6 (patch)
tree068025eb9669c83b1bec0880c2202825c7357080
parent574b02b67402995f04a5991b3cae577ac111af06 (diff)
JOGL refactoring: Refactored JOGL into 3 independent components.
1 NWI - Native windowing interface Abstracts the the general NativeWindow interface and it's factory, incl the basic JAWT and Xlib toolkit. The latter was motivated to clean up the JOGL workspace, and to allow other to reuse this part. The generic core is nwi.core.jar, the AWT add-on is nwi.awt.jar. 2 JOGL - The OpenGL mapping Further cleanup of the SPEC. All non OpenGL toolkits are relocated to NWI and NEWT. There is still openmax and the windows audio layer .. Another cleanup of the fixed function pipeline emulation. Moved utilities and implementations where they belong .. Removed GLUnsupportedException. Misc .. changes 3 NEWT - The new windowing toolkit The generic NEWT, newt.core.jar. The JOGL and AWT modules are seperate, newt.ogl.jar newt.awt.jar. Their build can be switched off. The modules source and builds resides in their own directory. Because of their nature, they share the stub_includes, etc. Each module has it's own ant build script - build-nwi.xml - build-jogl.xml - build-newt.xml They can be build at once using build.xml as ususal, which just invokes the seperate build tasks. if rootrel.build=build, then the build location is jogl/build-nwi jogl/build-jogl jogl/build-newt and the sources are under jogl/src/nwi jogl/src/jogl jogl/src/newt Tested: jogl-demos, d4; Linux, MacOsX; Nvidia git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/branches/JOGL_2_SANDBOX@1868 232f8b59-042b-4e1e-8c03-345bb8c30851
-rw-r--r--src/nwi/classes/com/sun/nwi/impl/NativeLibLoaderBase.java (renamed from src/classes/com/sun/opengl/impl/jawt/JAWTNativeLibLoader.java)82
1 files changed, 63 insertions, 19 deletions
diff --git a/src/classes/com/sun/opengl/impl/jawt/JAWTNativeLibLoader.java b/src/nwi/classes/com/sun/nwi/impl/NativeLibLoaderBase.java
index febe2f0..9e072fe 100644
--- a/src/classes/com/sun/opengl/impl/jawt/JAWTNativeLibLoader.java
+++ b/src/nwi/classes/com/sun/nwi/impl/NativeLibLoaderBase.java
@@ -37,33 +37,77 @@
* and developed by Kenneth Bradley Russell and Christopher John Kline.
*/
-package com.sun.opengl.impl.jawt;
+package com.sun.nwi.impl;
-import com.sun.opengl.impl.*;
-
-import java.awt.Toolkit;
+// FIXME: refactor Java SE dependencies
+//import java.awt.Toolkit;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.security.AccessController;
import java.security.PrivilegedAction;
+import java.util.HashSet;
-public class JAWTNativeLibLoader extends NativeLibLoader {
- public static void loadAWTImpl() {
+public class NativeLibLoaderBase {
+ public interface LoaderAction {
+ /**
+ * Loads the library specified by libname. Optionally preloads the libraries specified by
+ * preload. The implementation should ignore, if the preload-libraries have already been
+ * loaded.
+ * @param libname the library to load
+ * @param preload the libraries to load before loading the main library if not null
+ * @param preloadIgnoreError true, if errors during loading the preload-libraries should be ignored
+ */
+ void loadLibrary(String libname, String[] preload,
+ boolean preloadIgnoreError);
+ }
+
+ private static class DefaultAction implements LoaderAction {
+ public void loadLibrary(String libname, String[] preload,
+ boolean preloadIgnoreError) {
+ if (null!=preload) {
+ for (int i=0; i<preload.length; i++) {
+ try {
+ System.loadLibrary(preload[i]);
+ }
+ catch (UnsatisfiedLinkError e) {
+ if (!preloadIgnoreError && e.getMessage().indexOf("already loaded") < 0) {
+ throw e;
+ }
+ }
+ }
+ }
+ System.loadLibrary(libname);
+ }
+ }
+
+ private static final HashSet loaded = new HashSet();
+ private static LoaderAction loaderAction = new DefaultAction();
+
+ public static void disableLoading() {
+ setLoadingAction(null);
+ }
+
+ public static void enableLoading() {
+ setLoadingAction(new DefaultAction());
+ }
+
+ public static synchronized void setLoadingAction(LoaderAction action) {
+ loaderAction = action;
+ }
+
+ protected static synchronized void loadLibrary(String libname, String[] preload,
+ boolean preloadIgnoreError) {
+ if (loaderAction != null && !loaded.contains(libname))
+ {
+ loaderAction.loadLibrary(libname, preload, preloadIgnoreError);
+ loaded.add(libname);
+ }
+ }
+
+ public static void loadNWI(final String ossuffix) {
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
- // Make sure that awt.dll is loaded before loading jawt.dll. Otherwise
- // a Dialog with "awt.dll not found" might pop up.
- // See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4481947.
- Toolkit.getDefaultToolkit();
-
- // Must pre-load JAWT on all non-Mac platforms to
- // ensure references from jogl_awt shared object
- // will succeed since JAWT shared object isn't in
- // default library path
- boolean isOSX = System.getProperty("os.name").equals("Mac OS X");
- String[] preload = { "jawt" };
-
- loadLibrary("jogl_awt", preload, !isOSX, false);
+ loadLibrary("nwi_"+ossuffix, null, false);
return null;
}
});