diff options
Diffstat (limited to 'gl4java/utils/Test.java')
-rw-r--r-- | gl4java/utils/Test.java | 359 |
1 files changed, 359 insertions, 0 deletions
diff --git a/gl4java/utils/Test.java b/gl4java/utils/Test.java new file mode 100644 index 0000000..addc706 --- /dev/null +++ b/gl4java/utils/Test.java @@ -0,0 +1,359 @@ +/** + * @(#) Test.java + * @(#) author: Sven Goethel + */ + +package gl4java.utils; + + +/* This program is free software under the license of LGPL */ + +import java.applet.*; +import java.awt.*; +import java.awt.event.*; +import java.lang.*; +import java.util.*; +import java.io.*; +import java.util.*; +import gl4java.GLContext; +import gl4java.awt.GLCanvas; +import gl4java.awt.GLAnimCanvas; +import gl4java.applet.SimpleGLAnimApplet1; + +public class Test +{ + + public Test(String name, Object tstObj, int width, int height) + { + if(tstObj instanceof SimpleGLAnimApplet1) + { + SimpleGLAnimApplet1 glSAnimApplet = (SimpleGLAnimApplet1)tstObj; + + Frame f = new Frame(name); + + f.addWindowListener( new WindowAdapter() + { + public void windowClosed(WindowEvent e) + { + System.exit(0); + } + public void windowClosing(WindowEvent e) + { + windowClosed(e); + } + } + ); + + f.setLayout(new BorderLayout()); + + glSAnimApplet.setSize(width, height); + glSAnimApplet.init(); + glSAnimApplet.start(); + + f.add(glSAnimApplet); + + Dimension ps = glSAnimApplet.getPreferredSize(); + f.setBounds(-100,-100,99,99); + f.setVisible(true); + f.setVisible(false); + Insets i = f.getInsets(); + f.setBounds(0,0, + ps.width+i.left+i.right, + ps.height+i.top+i.bottom); + f.setVisible(true); + + } else if(tstObj instanceof GLAnimCanvas) + { + GLAnimCanvas glAnimCvsTest = (GLAnimCanvas)tstObj; + + GLAnimCanvasTest applet = new GLAnimCanvasTest(); + + Frame f = new Frame(name); + + f.addWindowListener( new WindowAdapter() + { + public void windowClosed(WindowEvent e) + { + System.exit(0); + } + public void windowClosing(WindowEvent e) + { + windowClosed(e); + } + } + ); + + f.setLayout(new BorderLayout()); + f.add("Center", applet); + applet.setSize(width,height); + applet.init(glAnimCvsTest); + applet.start(); + Dimension ps = applet.getPreferredSize(); + f.setBounds(-100,-100,99,99); + f.setVisible(true); + f.setVisible(false); + Insets i = f.getInsets(); + f.setBounds(0,0, + ps.width+i.left+i.right, + ps.height+i.top+i.bottom); + f.setVisible(true); + + } else { + GLCanvas glCvsTest = (GLCanvas)tstObj; + + GLCanvasTest applet = new GLCanvasTest(); + + Frame f = new Frame(name); + + f.addWindowListener( new WindowAdapter() + { + public void windowClosed(WindowEvent e) + { + System.exit(0); + } + public void windowClosing(WindowEvent e) + { + windowClosed(e); + } + } + ); + + f.setLayout(new BorderLayout()); + f.add("Center", applet); + applet.setSize(width,height); + applet.init(); + applet.start(); + Dimension ps = applet.getPreferredSize(); + f.setBounds(-100,-100,99,99); + f.setVisible(true); + f.setVisible(false); + Insets i = f.getInsets(); + f.setBounds(0,0, + ps.width+i.left+i.right, + ps.height+i.top+i.bottom); + f.setVisible(true); + } + } + + /** + * Test to load the native library, GLFunc and GLUFunc implementation ! + * If succesfull, a Frame will created and the GL-Infos (vendor, ...) + * are shown in it ! + * + * @param args, a list of args, + * + * -gljlib <glj-libname> gl4java-glj-lib native library + * -gllib <gl-libname> gl4java-gl-lib native library + * -glulib <glu-libname> gl4java-glu-lib native library + * -glclass <gl-class> gl4java-gl-class java GLFunc implementation + * -gluclass <glu-class> gl4java-glu-class java GLUFunc implementation + * -testclass <GLCanvas or SimpleGLAnimApplet1 Implementation Class> A derivation of GLCanvas (GLAnimCanvas also) or SimpleGLAnimApplet1 can be started here for testing purposes ! + * -w <int> the testclass window width (default 400) + * -h <int> the testclass window height (default 250) + * -perftest if a derivation of GLAnimCanvas is used as the testclass (see above), the fps-sleep and the use-repaint flags are set to false! + * + * without any arguments, a help screen is shown + */ + public static void main( String args[] ) + { + String gljLibName = null; + String glLibName = null; + String gluLibName = null; + String glName = GLContext.defGLFuncClass; + String gluName = GLContext.defGLUFuncClass; + String testClazzName = GLContext.defGLUFuncClass; + boolean perftest=false; + int width=400, height=250; + int i = 0; + boolean ok=true; + + if(args.length==0) + { + System.out.println("usage: java gl4java.GLContext <options>, where options can be: "); + System.out.println(" -gljlib <glj-libname> \t\t\t choose a custom the gl4java-glj-lib native library (default: GL4JavaJauGljJNI)"); + System.out.println(" -gllib <gl-libname> \t\t\t choose a custom the gl4java-gl-lib native library (default: GL4JavaJauGLJNI)"); + System.out.println(" -glulib <glu-libname> \t\t\t choose a custom the gl4java-glu-lib native library (default: GL4JavaJauGLUJNI"); + System.out.println(" -glclass <gl-class> \t\t\t choose a custom the gl4java-gl-class java GLFunc implementation (default: GLFuncJauJNI)"); + System.out.println(" -gluclass <glu-class> \t\t\t choose a custom the gl4java-glu-class java GLUFunc implementation (default: GLUFuncJauJNI)"); + System.out.println(" -testclass <GLCanvas Implementation Class> \t\t\t a derivation of GLCanvas (GLCanvas or GLAnimCanvas) can be started here for testing purposes !"); + System.out.println(" -w <int> \t\t\t the testclass window width (default 800) !"); + System.out.println(" -h <int> \t\t\t the testclass window height (default 600) !"); + System.out.println(" -perftest \t\t\t if a derivation of GLAnimCanvas is used as the testclass (see above), the fps-sleep and the use-repaint flags are set to false!"); + System.exit(0); + } + + while(args.length>i) + { + if(args[i].equals("-gljlib")) { + if(args.length>++i) gljLibName=args[i]; + } else if(args[i].equals("-gllib")) { + if(args.length>++i) glLibName=args[i]; + } else if(args[i].equals("-glulib")) { + if(args.length>++i) gluLibName=args[i]; + } else if(args[i].equals("-glclass")) { + if(args.length>++i) glName=args[i]; + } else if(args[i].equals("-gluclass")) { + if(args.length>++i) gluName=args[i]; + } else if(args[i].equals("-testclass")) { + if(args.length>++i) testClazzName=args[i]; + } else if(args[i].equals("-w")) { + if(args.length>++i) { + try { + width = Integer.valueOf(args[i]).intValue(); + } catch (Exception ex) { + System.out.println("invalid width, please insert an integer value !"); + ok=false; + } + } + } else if(args[i].equals("-h")) { + if(args.length>++i) { + try { + height = Integer.valueOf(args[i]).intValue(); + } catch (Exception ex) { + System.out.println("invalid height, please insert an integer value !"); + ok=false; + } + } + } else if(args[i].equals("-perftest")) { + perftest=true; + } else { + System.out.println("illegal arg "+i+": "+args[i]); + ok=false; + } + i++; + } + + if(!perftest) + { + GLContext.gljNativeDebug = true; + GLContext.gljClassDebug = true; + } else { + GLContext.gljNativeDebug = false; + GLContext.gljClassDebug = false; + } + + if(GLContext.loadNativeLibraries(gljLibName, glLibName, gluLibName)) + System.out.println("native Libraries loaded succesfull"); + else { + System.out.println("native library NOT loaded complete"); + ok=false; + } + + Object tstObj = null; + + if(ok==true) + { + try { + Class canvasClazz = + Class.forName("gl4java.awt.GLCanvas"); + Class animCanvasClazz = + Class.forName("gl4java.awt.GLAnimCanvas"); + Class animAppletCanvasClazz = + Class.forName("gl4java.applet.SimpleGLAnimApplet1"); + + Class tstClazz = + Class.forName(testClazzName); + + if( ! canvasClazz.isAssignableFrom(tstClazz) && + ! animAppletCanvasClazz.isAssignableFrom(tstClazz) ) + { + System.out.println("Your test-clazz is neither derived from gl4java.awt.GLCanvas nor from gl4java.applet.SimpleGLAnimApplet1!"); + ok=false; + throw new Exception(); + } + + /** + * Std. conversion from Integer -> int + */ + Class[] parameterTypes = new Class[4]; + parameterTypes[0] = Class.forName("java.lang.Integer"); + parameterTypes[1] = Class.forName("java.lang.Integer"); + parameterTypes[2] = Class.forName("java.lang.String"); + parameterTypes[3] = Class.forName("java.lang.String"); + + Object[] parameters = null; + java.lang.reflect.Constructor tstObjConstr = null; + + try { + tstObjConstr = tstClazz.getConstructor(parameterTypes); + + parameters = new Object[4]; + parameters[0] = new java.lang.Integer(width); + parameters[1] = new java.lang.Integer(height); + parameters[2] = glName; + parameters[3] = gluName; + + } catch (java.lang.NoSuchMethodException nsme) { + + try { + parameterTypes = new Class[4]; + parameterTypes[0] = Class.forName("java.lang.Integer"); + parameterTypes[1] = Class.forName("java.lang.Integer"); + + tstObjConstr = tstClazz.getConstructor(parameterTypes); + + parameters = new Object[4]; + parameters[0] = new java.lang.Integer(width); + parameters[1] = new java.lang.Integer(height); + + } catch (java.lang.NoSuchMethodException nsme2) { + tstObj = tstClazz.newInstance(); + } + } + + if(tstObj==null && parameters!=null) + tstObj = tstObjConstr.newInstance(parameters); + + } catch (Exception ex) { + System.out.println("Instantiation of: "+testClazzName+" failed !"); + System.out.println(ex); + ok =false; + } + + ok = tstObj!=null ; + } + + if(ok) { + // let's do it ... + Test test = new Test(testClazzName, tstObj, width, height); + } + } + + private class GLAnimCanvasTest extends SimpleGLAnimApplet1 + { + public void init(GLAnimCanvas glAnimCanvas) + { + super.init(); + Dimension d = getSize(); + canvas = glAnimCanvas; + add("Center", canvas); + } + } + + private class GLCanvasTest extends Applet + { + GLCanvas canvas = null; + + /* Initialize the applet */ + + public void init(GLCanvas glCanvas) + { + Dimension d = getSize(); + setLayout(new BorderLayout()); + canvas = glCanvas; + add("Center", canvas); + } + + /* Start the applet */ + + public void start() + { + } + + /* Stop the applet */ + + public void stop() + { + } + } +} |