aboutsummaryrefslogtreecommitdiffstats
path: root/src/classes/javax/media
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2008-06-25 11:23:13 +0000
committerSven Gothel <[email protected]>2008-06-25 11:23:13 +0000
commit6a27950bbbb70018b44dc9e3be16d933c3c2999d (patch)
tree70cb9cd619d604ac749276d48ff9ae6f226e9402 /src/classes/javax/media
parent6e9438e631b9f75340c1f7e7cf06b38a358861c4 (diff)
Auto GL profile selection; New GLReflection (refactoring of common relfections); Fixes
git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/branches/JOGL_2_SANDBOX@1684 232f8b59-042b-4e1e-8c03-345bb8c30851
Diffstat (limited to 'src/classes/javax/media')
-rw-r--r--src/classes/javax/media/opengl/GLDrawableFactory.java91
-rw-r--r--src/classes/javax/media/opengl/GLProfile.java79
-rw-r--r--src/classes/javax/media/opengl/NativeWindowFactory.java12
3 files changed, 74 insertions, 108 deletions
diff --git a/src/classes/javax/media/opengl/GLDrawableFactory.java b/src/classes/javax/media/opengl/GLDrawableFactory.java
index 8177f2924..2a8b32356 100644
--- a/src/classes/javax/media/opengl/GLDrawableFactory.java
+++ b/src/classes/javax/media/opengl/GLDrawableFactory.java
@@ -90,13 +90,7 @@ public abstract class GLDrawableFactory {
// and if so, try to instantiate the EGLDrawableFactory
if (GLProfile.isGLES()) {
try {
- Class clazz = Class.forName("com.sun.opengl.impl.egl.awt.EGLDrawableFactory");
- /**
- Constructor c = clazz.getDeclaredConstructor(new Class[] { String.class });
- awtFactory = (GLDrawableFactory) c.newInstance(new Object[] { GLProfile.getProfile() });
- */
- Constructor c = clazz.getDeclaredConstructor(new Class[0]);
- awtFactory = (GLDrawableFactory) c.newInstance(null);
+ awtFactory = (GLDrawableFactory) GLReflection.createInstance("com.sun.opengl.impl.egl.awt.EGLDrawableFactory");
return;
} catch (Exception e) {
e.printStackTrace();
@@ -116,7 +110,6 @@ public abstract class GLDrawableFactory {
});
String osName = System.getProperty("os.name");
String osNameLowerCase = osName.toLowerCase();
- Class factoryClass = null;
// Because there are some complications with generating all
// platforms' Java glue code on all platforms (among them that we
@@ -124,27 +117,18 @@ public abstract class GLDrawableFactory {
// sources, which we currently don't have to do) we break the only
// static dependencies with platform-specific code here using reflection.
- if (factoryClassName != null) {
- factoryClass = Class.forName(factoryClassName);
- } else if (osNameLowerCase.startsWith("wind")) {
- factoryClass = Class.forName("com.sun.opengl.impl.windows.wgl.WindowsWGLDrawableFactory");
- } else if (osNameLowerCase.startsWith("mac os x")) {
- factoryClass = Class.forName("com.sun.opengl.impl.macosx.cgl.awt.MacOSXAWTCGLDrawableFactory");
- } else {
- // Assume Linux, Solaris, etc. Should probably test for these explicitly.
- factoryClass = Class.forName("com.sun.opengl.impl.x11.glx.awt.X11AWTGLXDrawableFactory");
+ if (factoryClassName == null) {
+ if (osNameLowerCase.startsWith("wind")) {
+ factoryClassName = "com.sun.opengl.impl.windows.wgl.WindowsWGLDrawableFactory";
+ } else if (osNameLowerCase.startsWith("mac os x")) {
+ factoryClassName = "com.sun.opengl.impl.macosx.cgl.awt.MacOSXAWTCGLDrawableFactory";
+ } else {
+ // Assume Linux, Solaris, etc. Should probably test for these explicitly.
+ factoryClassName = "com.sun.opengl.impl.x11.glx.awt.X11AWTGLXDrawableFactory";
+ }
}
- if (factoryClass == null) {
- throw new GLException("OS " + osName + " not yet supported");
- }
-
- /**
- Constructor c = factoryClass.getDeclaredConstructor(new Class[] { String.class });
- awtFactory = (GLDrawableFactory) c.newInstance(new Object[] { GLProfile.getProfile() });
- */
- Constructor c = factoryClass.getDeclaredConstructor(new Class[0]);
- awtFactory = (GLDrawableFactory) c.newInstance(null);
+ awtFactory = (GLDrawableFactory) GLReflection.createInstance(factoryClassName);
} catch (Exception e) {
throw new GLException(e);
}
@@ -160,13 +144,7 @@ public abstract class GLDrawableFactory {
// and if so, try to instantiate the EGLDrawableFactory
if (GLProfile.isGLES()) {
try {
- Class clazz = Class.forName("com.sun.opengl.impl.egl.EGLDrawableFactory");
- /**
- Constructor c = clazz.getDeclaredConstructor(new Class[] { String.class });
- nwFactory = (GLDrawableFactory) c.newInstance(new Object[] { GLProfile.getProfile() });
- */
- Constructor c = clazz.getDeclaredConstructor(new Class[0]);
- nwFactory = (GLDrawableFactory) c.newInstance(null);
+ nwFactory = (GLDrawableFactory) GLReflection.createInstance("com.sun.opengl.impl.egl.EGLDrawableFactory");
return;
} catch (Exception e) {
e.printStackTrace();
@@ -186,29 +164,19 @@ public abstract class GLDrawableFactory {
});
String osName = System.getProperty("os.name");
String osNameLowerCase = osName.toLowerCase();
- Class factoryClass = null;
-
- if (factoryClassName != null) {
- factoryClass = Class.forName(factoryClassName);
- } else if (osNameLowerCase.startsWith("wind")) {
- factoryClass = Class.forName("com.sun.opengl.impl.windows.wgl.WindowsWGLDrawableFactory");
- } else if (osNameLowerCase.startsWith("mac os x")) {
- factoryClass = Class.forName("com.sun.opengl.impl.macosx.cgl.MacOSXCGLDrawableFactory");
- } else {
- // Assume Linux, Solaris, etc. Should probably test for these explicitly.
- factoryClass = Class.forName("com.sun.opengl.impl.x11.glx.X11GLXDrawableFactory");
- }
- if (factoryClass == null) {
- throw new GLException("OS " + osName + " not yet supported");
+ if (factoryClassName == null) {
+ if (osNameLowerCase.startsWith("wind")) {
+ factoryClassName = "com.sun.opengl.impl.windows.wgl.WindowsWGLDrawableFactory";
+ } else if (osNameLowerCase.startsWith("mac os x")) {
+ factoryClassName = "com.sun.opengl.impl.macosx.cgl.MacOSXCGLDrawableFactory";
+ } else {
+ // Assume Linux, Solaris, etc. Should probably test for these explicitly.
+ factoryClassName = "com.sun.opengl.impl.x11.glx.X11GLXDrawableFactory";
+ }
}
- /**
- Constructor c = factoryClass.getDeclaredConstructor(new Class[] { String.class });
- nwFactory = (GLDrawableFactory) c.newInstance(new Object[] { GLProfile.getProfile() });
- */
- Constructor c = factoryClass.getDeclaredConstructor(new Class[0]);
- nwFactory = (GLDrawableFactory) c.newInstance(null);
+ nwFactory = (GLDrawableFactory) GLReflection.createInstance(factoryClassName);
return;
} catch (Exception e) {
throw new GLException(e);
@@ -220,14 +188,6 @@ public abstract class GLDrawableFactory {
protected GLDrawableFactory() {
}
- /** Returns the sole GLDrawableFactory instance for the specified profile. */
- public static GLDrawableFactory getFactory(String profile, Object target)
- throws GLException
- {
- GLProfile.setProfile(profile);
- return getFactory(target);
- }
-
public static GLDrawableFactory getFactory(Object target)
throws GLException
{
@@ -244,13 +204,6 @@ public abstract class GLDrawableFactory {
"\tjava.awt.Component\n");
}
- public static GLDrawableFactory getFactory(String profile, boolean awt)
- throws GLException
- {
- GLProfile.setProfile(profile);
- return getFactory(awt);
- }
-
public static GLDrawableFactory getFactory(boolean awt)
throws GLException
{
diff --git a/src/classes/javax/media/opengl/GLProfile.java b/src/classes/javax/media/opengl/GLProfile.java
index 245cdd95f..c1d46d8bb 100644
--- a/src/classes/javax/media/opengl/GLProfile.java
+++ b/src/classes/javax/media/opengl/GLProfile.java
@@ -53,12 +53,30 @@ public class GLProfile {
/** The JVM/process wide choosen GL profile **/
private static String profile = null;
- public static final void setProfile(String profile)
+ private static final void tryLibrary()
+ {
+ try {
+ if(GL2.equals(profile)) {
+ NativeLibLoader.loadGL2();
+ } else if(GLES1.equals(profile) || GLES2.equals(profile)) {
+ Object eGLDrawableFactory = GLReflection.createInstance("com.sun.opengl.impl.egl.EGLDrawableFactory");
+ if(null==eGLDrawableFactory) {
+ throw new GLException("com.sun.opengl.impl.egl.EGLDrawableFactory not available");
+ }
+ }
+ } catch (Exception e) {
+ System.out.println("Profile: "+profile+" not available");
+ System.out.println("Exception: "+e);
+ profile=null;
+ }
+ }
+
+ public static synchronized final void setProfile(String profile)
throws GLException
{
if(null==GLProfile.profile) {
- // preset profile .. 1st come 1st serve
GLProfile.profile = profile;
+ tryLibrary();
} else {
if(!GLProfile.profile.equals(profile)) {
throw new GLException("Choosen profile ("+profile+") doesn't match preset one: "+GLProfile.profile);
@@ -66,6 +84,31 @@ public class GLProfile {
}
}
+ public static synchronized final void setProfile(String[] profiles)
+ throws GLException
+ {
+ for(int i=0; profile==null && i<profiles.length; i++) {
+ setProfile(profiles[i]);
+ }
+ if(null==profile) {
+ throw new GLException("Profiles "+profiles+" not available");
+ }
+ }
+
+ public static synchronized final void setProfileGL2ES1() {
+ setProfile(new String[] { GLES1, GL2 });
+ if(null==profile) {
+ throw new GLException("Profiles GLES1 and GL2 not available");
+ }
+ }
+
+ public static synchronized final void setProfileGL2ES2() {
+ setProfile(new String[] { GLES2, GL2 });
+ if(null==profile) {
+ throw new GLException("Profiles GLES2 and GL2 not available");
+ }
+ }
+
public static final String getProfile() {
return profile;
}
@@ -98,38 +141,16 @@ public class GLProfile {
return (null==test_profile)?false:test_profile.equals(profile);
}
- public static final boolean instanceOf(Object obj, String clazzName) {
- Class clazz = obj.getClass();
- do {
- if(clazz.getName().equals(clazzName)) {
- return true;
- }
- clazz = clazz.getSuperclass();
- } while (clazz!=null);
- return false;
- }
-
- public static final boolean implementationOf(Object obj, String faceName) {
- Class[] clazzes = obj.getClass().getInterfaces();
- for(int i=clazzes.length-1; i>=0; i--) {
- Class face = clazzes[i];
- if(face.getName().equals(faceName)) {
- return true;
- }
- }
- return false;
- }
-
public static final boolean implementationOfGL2(Object obj) {
- return implementationOf(obj, "javax.media.opengl.GL2");
+ return GLReflection.implementationOf(obj, "javax.media.opengl.GL2");
}
public static final boolean implementationOfGLES1(Object obj) {
- return implementationOf(obj, "javax.media.opengl.GLES1");
+ return GLReflection.implementationOf(obj, "javax.media.opengl.GLES1");
}
public static final boolean implementationOfGLES2(Object obj) {
- return implementationOf(obj, "javax.media.opengl.GLES2");
+ return GLReflection.implementationOf(obj, "javax.media.opengl.GLES2");
}
public static final boolean implementationOfGLES(Object obj) {
@@ -137,11 +158,11 @@ public class GLProfile {
}
public static final boolean implementationOfGL2ES1(Object obj) {
- return implementationOf(obj, "javax.media.opengl.GL2ES1");
+ return GLReflection.implementationOf(obj, "javax.media.opengl.GL2ES1");
}
public static final boolean implementationOfGL2ES2(Object obj) {
- return implementationOf(obj, "javax.media.opengl.GL2ES2");
+ return GLReflection.implementationOf(obj, "javax.media.opengl.GL2ES2");
}
}
diff --git a/src/classes/javax/media/opengl/NativeWindowFactory.java b/src/classes/javax/media/opengl/NativeWindowFactory.java
index 9bbfe7aac..006cb03ba 100644
--- a/src/classes/javax/media/opengl/NativeWindowFactory.java
+++ b/src/classes/javax/media/opengl/NativeWindowFactory.java
@@ -53,7 +53,6 @@ public class NativeWindowFactory {
try {
String osName = System.getProperty("os.name");
String osNameLowerCase = osName.toLowerCase();
- Class factoryClass = null;
String factoryClassName = null;
// Because there are some complications with generating all
@@ -74,15 +73,8 @@ public class NativeWindowFactory {
if (factoryClassName == null) {
throw new GLException("OS " + osName + " not yet supported");
}
- factoryClass = Class.forName(factoryClassName);
- if (factoryClass == null) {
- throw new GLException("Factory " + factoryClassName + " not yet implemented");
- }
-
- try {
- awtFactory = factoryClass.getDeclaredConstructor(new Class[] { Object.class });
- } catch(NoSuchMethodException nsme) {}
+ awtFactory = GLReflection.getConstructor(factoryClassName, new Class[] { Object.class });
} catch (Exception e) {
throw new GLException(e);
}
@@ -95,7 +87,7 @@ public class NativeWindowFactory {
* hence the independency to the java.awt.* package.
*/
public static boolean isAWTComponent(Object target) {
- return GLProfile.instanceOf(target, "java.awt.Component");
+ return GLReflection.instanceOf(target, "java.awt.Component");
}
/**