From ac358bd66878e63a370377d4c7f625ec5b1b9e31 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Fri, 23 Sep 2011 15:38:28 +0200 Subject: Use Platform's initSingleton() instead of JVMUtil's (private package) ; Use TempJarCache if used. --- src/jogl/classes/javax/media/opengl/GLProfile.java | 37 ++++++++++++++++++++-- .../media/nativewindow/NativeWindowFactory.java | 29 ++++++++--------- .../jogamp/nativewindow/jawt/JAWTJNILibLoader.java | 2 +- src/newt/classes/com/jogamp/newt/NewtFactory.java | 6 ++-- 4 files changed, 53 insertions(+), 21 deletions(-) diff --git a/src/jogl/classes/javax/media/opengl/GLProfile.java b/src/jogl/classes/javax/media/opengl/GLProfile.java index a7231efc8..f76ad5d24 100644 --- a/src/jogl/classes/javax/media/opengl/GLProfile.java +++ b/src/jogl/classes/javax/media/opengl/GLProfile.java @@ -43,9 +43,13 @@ import jogamp.opengl.GLDynamicLookupHelper; import jogamp.opengl.DesktopGLDynamicLookupHelper; import com.jogamp.common.GlueGenVersion; -import com.jogamp.common.jvm.JVMUtil; +import com.jogamp.common.jvm.JNILibLoaderBase; +import com.jogamp.common.os.Platform; +import com.jogamp.common.util.IOUtil; +import com.jogamp.common.util.JarUtil; import com.jogamp.common.util.ReflectionUtil; import com.jogamp.common.util.VersionUtil; +import com.jogamp.common.util.cache.TempJarCache; import com.jogamp.nativewindow.NativeWindowVersion; import com.jogamp.opengl.JoglVersion; @@ -53,6 +57,7 @@ import javax.media.nativewindow.AbstractGraphicsDevice; import javax.media.nativewindow.NativeWindowFactory; import javax.media.opengl.fixedfunc.GLPointerFunc; +import java.io.IOException; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.HashMap; @@ -107,8 +112,34 @@ public class GLProfile { initialized = true; // run the whole static initialization privileged to speed up, // since this skips checking further access - AccessController.doPrivileged(new PrivilegedAction() { + AccessController.doPrivileged(new PrivilegedAction() { public Object run() { + if(TempJarCache.isInitialized()) { + final Class c = GLProfile.class; + final ClassLoader cl = c.getClassLoader(); + try { + final String jarName = JarUtil.getJarName(c.getName(), cl); + if(DEBUG) { + System.err.println("GLProfile classURL: "+IOUtil.getClassURL(c.getName(), cl)); + System.err.println("GLProfile jarName: "+jarName); + } + if(jarName!=null) { + if( jarName.startsWith("jogl.all") ) { + // all-in-one variant + JNILibLoaderBase.addNativeJarLibs(c, "jogl-all"); + } else { + // atomic variant + JNILibLoaderBase.addNativeJarLibs(c, "nativewindow"); + JNILibLoaderBase.addNativeJarLibs(c, "jogl"); + if( ReflectionUtil.isClassAvailable("com.jogamp.newt.NewtFactory", cl) ) { + JNILibLoaderBase.addNativeJarLibs(c, "newt"); + } + } + } + } catch (IOException ioe) { + ioe.printStackTrace(); + } + } initProfilesForDefaultDevices(firstUIActionOnProcess); return null; } @@ -1142,7 +1173,7 @@ public class GLProfile { } static { - JVMUtil.initSingleton(); + Platform.initSingleton(); } private static /*final*/ boolean isAWTAvailable; diff --git a/src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java b/src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java index b7f207752..5c01c681a 100644 --- a/src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java +++ b/src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java @@ -37,7 +37,6 @@ import java.security.*; import java.util.*; import com.jogamp.common.util.*; -import com.jogamp.common.jvm.JVMUtil; import com.jogamp.common.os.Platform; import jogamp.nativewindow.*; @@ -75,8 +74,8 @@ public abstract class NativeWindowFactory { public static final String TYPE_DEFAULT = "default"; private static NativeWindowFactory defaultFactory; - private static Map/**/ registeredFactories; - private static Class nativeWindowClass; + private static Map, NativeWindowFactory> registeredFactories; + private static Class nativeWindowClass; private static String nativeWindowingTypePure; private static String nativeWindowingTypeCustom; private static boolean isAWTAvailable; @@ -86,13 +85,13 @@ public abstract class NativeWindowFactory { public static final String GDIClassName = "jogamp.nativewindow.windows.GDI"; public static final String X11JAWTToolkitLockClassName = "jogamp.nativewindow.jawt.x11.X11JAWTToolkitLock" ; public static final String X11ToolkitLockClassName = "jogamp.nativewindow.x11.X11ToolkitLock" ; - private static Class jawtUtilClass; + private static Class jawtUtilClass; private static Method jawtUtilGetJAWTToolkitMethod; private static Method jawtUtilInitMethod; - private static Class x11JAWTToolkitLockClass; - private static Constructor x11JAWTToolkitLockConstructor; - private static Class x11ToolkitLockClass; - private static Constructor x11ToolkitLockConstructor; + private static Class x11JAWTToolkitLockClass; + private static Constructor x11JAWTToolkitLockConstructor; + private static Class x11ToolkitLockClass; + private static Constructor x11ToolkitLockConstructor; private static boolean isFirstUIActionOnProcess; private static boolean requiresToolkitLock; @@ -122,7 +121,7 @@ public abstract class NativeWindowFactory { } static { - JVMUtil.initSingleton(); + Platform.initSingleton(); DEBUG = Debug.debug("NativeWindow"); if(DEBUG) { Throwable td = new Throwable(Thread.currentThread().getName()+" - Info: NativeWindowFactory."); @@ -227,7 +226,7 @@ public abstract class NativeWindowFactory { // X11 initialization after possible AWT initialization initNativeImpl(false, cl); } - registeredFactories = Collections.synchronizedMap(new HashMap()); + registeredFactories = Collections.synchronizedMap(new HashMap, NativeWindowFactory>()); // register our default factory -> NativeWindow NativeWindowFactory factory = new NativeWindowFactoryImpl(); @@ -412,13 +411,13 @@ public abstract class NativeWindowFactory { already assumed the responsibility of creating a compatible NativeWindow implementation, or it might be that of a toolkit class like {@link java.awt.Component Component}. */ - public static NativeWindowFactory getFactory(Class windowClass) throws IllegalArgumentException { + public static NativeWindowFactory getFactory(Class windowClass) throws IllegalArgumentException { if (nativeWindowClass.isAssignableFrom(windowClass)) { - return (NativeWindowFactory) registeredFactories.get(nativeWindowClass); + return registeredFactories.get(nativeWindowClass); } - Class clazz = windowClass; + Class clazz = windowClass; while (clazz != null) { - NativeWindowFactory factory = (NativeWindowFactory) registeredFactories.get(clazz); + NativeWindowFactory factory = registeredFactories.get(clazz); if (factory != null) { return factory; } @@ -430,7 +429,7 @@ public abstract class NativeWindowFactory { /** Registers a NativeWindowFactory handling window objects of the given class. This does not need to be called by end users, only implementors of new NativeWindowFactory subclasses. */ - protected static void registerFactory(Class windowClass, NativeWindowFactory factory) { + protected static void registerFactory(Class windowClass, NativeWindowFactory factory) { if(DEBUG) { System.err.println("NativeWindowFactory.registerFactory() "+windowClass+" -> "+factory); } diff --git a/src/nativewindow/classes/jogamp/nativewindow/jawt/JAWTJNILibLoader.java b/src/nativewindow/classes/jogamp/nativewindow/jawt/JAWTJNILibLoader.java index 1ac9e1709..2c8538278 100644 --- a/src/nativewindow/classes/jogamp/nativewindow/jawt/JAWTJNILibLoader.java +++ b/src/nativewindow/classes/jogamp/nativewindow/jawt/JAWTJNILibLoader.java @@ -48,7 +48,7 @@ import java.security.PrivilegedAction; public class JAWTJNILibLoader extends NWJNILibLoader { public static void loadAWTImpl() { - AccessController.doPrivileged(new PrivilegedAction() { + 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. diff --git a/src/newt/classes/com/jogamp/newt/NewtFactory.java b/src/newt/classes/com/jogamp/newt/NewtFactory.java index 62da8c978..d3be098c0 100644 --- a/src/newt/classes/com/jogamp/newt/NewtFactory.java +++ b/src/newt/classes/com/jogamp/newt/NewtFactory.java @@ -35,7 +35,9 @@ package com.jogamp.newt; import javax.media.nativewindow.*; -import com.jogamp.common.jvm.JVMUtil; + +import com.jogamp.common.os.Platform; + import jogamp.newt.DisplayImpl; import jogamp.newt.ScreenImpl; import jogamp.newt.WindowImpl; @@ -47,7 +49,7 @@ public class NewtFactory { // Work-around for initialization order problems on Mac OS X // between native Newt and (apparently) Fmod static { - JVMUtil.initSingleton(); + Platform.initSingleton(); NativeWindowFactory.initSingleton(false); // last resort .. WindowImpl.init(NativeWindowFactory.getNativeWindowType(true)); } -- cgit v1.2.3