diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/jogl/classes/javax/media/opengl/GLProfile.java | 67 | ||||
-rwxr-xr-x | src/junit/com/jogamp/test/junit/jogl/awt/TestSwingAWT01GLn.java | 163 |
2 files changed, 196 insertions, 34 deletions
diff --git a/src/jogl/classes/javax/media/opengl/GLProfile.java b/src/jogl/classes/javax/media/opengl/GLProfile.java index 3d0f4a3ce..21d32e16a 100644 --- a/src/jogl/classes/javax/media/opengl/GLProfile.java +++ b/src/jogl/classes/javax/media/opengl/GLProfile.java @@ -36,15 +36,11 @@ package javax.media.opengl; -import com.jogamp.common.util.*; +import com.jogamp.common.util.ReflectionUtil; import com.jogamp.opengl.impl.Debug; -import com.jogamp.opengl.impl.GLJNILibLoader; import com.jogamp.opengl.impl.GLDrawableFactoryImpl; import com.jogamp.opengl.impl.GLDynamicLookupHelper; -import com.jogamp.opengl.impl.GLDynamicLibraryBundleInfo; import com.jogamp.opengl.impl.DesktopGLDynamicLookupHelper; -import com.jogamp.opengl.impl.DesktopGLDynamicLibraryBundleInfo; -import com.jogamp.common.jvm.JVMUtil; import java.util.HashMap; import java.util.Iterator; import java.security.*; @@ -60,7 +56,8 @@ import javax.media.nativewindow.NativeWindowFactory; * The platform default profile may be used, using {@link GLProfile#GetProfileDefault()}, * or more specialized versions using the other static GetProfile methods. */ -public class GLProfile implements Cloneable { +public class GLProfile { + public static final boolean DEBUG = Debug.debug("GLProfile"); // @@ -89,7 +86,6 @@ public class GLProfile implements Cloneable { public static final String glAvailabilityToString() { boolean avail; - String str; StringBuffer sb = new StringBuffer(); sb.append("GLAvailability[Native[GL4bc "); @@ -376,7 +372,7 @@ public class GLProfile implements Cloneable { return glProfile; } } - throw new GLException("Profiles "+list2String(profiles)+" not available"); + throw new GLException("Profiles "+array2String(profiles)+" not available"); } /** Indicates whether the native OpenGL ES1 profile is in use. @@ -420,14 +416,6 @@ public class GLProfile implements Cloneable { return getGLImplBaseClassName(profileImpl); } - public Object clone() { - try { - return super.clone(); - } catch (Exception e) { - throw new GLException(e); - } - } - /** * @param o GLProfile object to compare with * @return true if given Object is a GLProfile and @@ -436,20 +424,26 @@ public class GLProfile implements Cloneable { public final boolean equals(Object o) { if(o instanceof GLProfile) { GLProfile glp = (GLProfile)o; - return profile.equals(glp.getName()) && - profileImpl.equals(glp.getImplName()) ; + return profile.equals(glp.getName()) && profileImpl.equals(glp.getImplName()) ; } return false; } + + public int hashCode() { + int hash = 5; + hash = 97 * hash + (this.profileImpl != null ? this.profileImpl.hashCode() : 0); + hash = 97 * hash + (this.profile != null ? this.profile.hashCode() : 0); + return hash; + } /** * @param glp GLProfile to compare with * @throws GLException if given GLProfile and this aren't equal */ - public final void verifyEquality(GLProfile glp) - throws GLException - { - if(!this.equals(glp)) throw new GLException("GLProfiles are not equal: "+this+" != "+glp); + public final void verifyEquality(GLProfile glp) throws GLException { + if(!this.equals(glp)) { + throw new GLException("GLProfiles are not equal: "+this+" != "+glp); + } } public final String getName() { @@ -856,16 +850,10 @@ public class GLProfile implements Cloneable { * Tries the profiles implementation and native libraries. * Throws an GLException if no profile could be found at all. */ - static { - // run the whole static initialization privileged to speed up, - // since this skips checking further access - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { + private static void initProfiles() { NativeWindowFactory.initSingleton(); - AccessControlContext acc = AccessController.getContext(); - isAWTAvailable = NativeWindowFactory.isAWTAvailable() && ReflectionUtil.isClassAvailable("javax.media.opengl.awt.GLCanvas") ; // JOGL @@ -889,7 +877,7 @@ public class GLProfile implements Cloneable { // // - Instantiate GLDrawableFactory incl its shared dummy drawable/context, // which will register at GLContext .. - // + // t=null; // if successfull it has a shared dummy drawable and context created @@ -986,12 +974,23 @@ public class GLProfile implements Cloneable { System.err.println("GLProfile.static "+glAvailabilityToString()); } - return null; - } + } + + /** + * Initializes available profiles eagerly. + */ + static { + // run the whole static initialization privileged to speed up, + // since this skips checking further access + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + initProfiles(); + return null; + } }); if(null==defaultGLProfile) { - throw new GLException("No profile available: "+list2String(GL_PROFILE_LIST_ALL)+", "+glAvailabilityToString()); + throw new GLException("No profile available: "+array2String(GL_PROFILE_LIST_ALL)+", "+glAvailabilityToString()); } } @@ -1004,7 +1003,7 @@ public class GLProfile implements Cloneable { public static void initSingleton() { } - private static final String list2String(String[] list) { + private static final String array2String(String[] list) { StringBuffer msg = new StringBuffer(); msg.append("["); for (int i = 0; i < list.length; i++) { diff --git a/src/junit/com/jogamp/test/junit/jogl/awt/TestSwingAWT01GLn.java b/src/junit/com/jogamp/test/junit/jogl/awt/TestSwingAWT01GLn.java new file mode 100755 index 000000000..ed8a5dd0f --- /dev/null +++ b/src/junit/com/jogamp/test/junit/jogl/awt/TestSwingAWT01GLn.java @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2010 Michael Bien. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * - Redistribution of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistribution in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name Michael Bien or the names of + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * This software is provided "AS IS," without a warranty of any kind. ALL + * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, + * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR + * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR + * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE + * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, + * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF + * MICHAEL BIEN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + */ + +package com.jogamp.test.junit.jogl.awt; + +import java.lang.reflect.InvocationTargetException; +import javax.media.opengl.GLProfile; +import javax.media.opengl.GLCapabilities; +import javax.media.opengl.awt.GLCanvas; +import com.jogamp.opengl.util.Animator; + +import com.jogamp.test.junit.jogl.demos.gl2.gears.Gears; +import java.awt.Frame; +import java.awt.Window; +import javax.swing.JFrame; + +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import static org.junit.Assume.*; +import static org.junit.Assert.*; +import static javax.swing.SwingUtilities.*; + +/** + * Tests context creation + display on various kinds of Window implementations. + * @author Michael Bien + */ +public class TestSwingAWT01GLn { + + private Window[] windows; + + + @BeforeClass + public static void startup() { + System.out.println("GLProfile <static> "+GLProfile.glAvailabilityToString()); + } + + @Before + public void init() { + windows = new Window[]{ + new Window(null), + new Frame("Frame GL test"), + new JFrame("JFrame GL test") + }; + } + + protected void runTestGL(final GLCapabilities caps) throws InterruptedException, InvocationTargetException { + + for (final Window window : windows) { + + System.out.println("testing with "+window.getClass().getName()); + + // final array as mutable container hack + final GLCanvas[] glCanvas = new GLCanvas[1]; + + Runnable test = new Runnable() { + public void run() { + glCanvas[0] = new GLCanvas(caps); + glCanvas[0].addGLEventListener(new Gears()); + window.add(glCanvas[0]); + window.setSize(512, 512); + glCanvas[0].display(); + window.setVisible(true); + } + }; + + Runnable cleanup = new Runnable() { + public void run() { + System.out.println("cleaning up..."); + window.setVisible(false); + try { + window.removeAll(); + } catch (Throwable t) { + assumeNoException(t); + t.printStackTrace(); + } + window.dispose(); + } + + }; + + //swing on EDT.. + if(window instanceof JFrame) { + invokeAndWait(test); + }else{ + test.run(); + } + + Animator animator = new Animator(glCanvas[0]); + animator.start(); + Thread.sleep(500); + animator.stop(); + + if(window instanceof JFrame) { + invokeAndWait(cleanup); + }else{ + cleanup.run(); + } + } + } + + @Test + public void test01GLDefault() throws InterruptedException, InvocationTargetException { + GLProfile glp = GLProfile.getDefault(); + System.out.println("GLProfile Default: "+glp); + GLCapabilities caps = new GLCapabilities(glp); + runTestGL(caps); + } + + @Test + public void test03GLMaxFixed() throws InterruptedException, InvocationTargetException { + GLProfile maxFixed = GLProfile.getMaxFixedFunc(); + System.out.println("GLProfile MaxFixed: "+maxFixed); + GLCapabilities caps = new GLCapabilities(maxFixed); + try { + runTestGL(caps); + } catch (Throwable t) { + // FIXME: + // Stop test and ignore if GL3bc and GL4bc + // currently this won't work on ATI! + if(maxFixed.getName().equals(GLProfile.GL3bc) || + maxFixed.getName().equals(GLProfile.GL4bc)) { + t.printStackTrace(); + assumeNoException(t); + } + // else .. serious unexpected exception + } + } + + public static void main(String args[]) { + org.junit.runner.JUnitCore.main(TestSwingAWT01GLn.class.getName()); + } +} |