aboutsummaryrefslogtreecommitdiffstats
path: root/src/test/com/jogamp
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2012-07-04 18:02:11 +0200
committerSven Gothel <[email protected]>2012-07-04 18:02:11 +0200
commit9b35c57425b0a5f6b789b9b43a62a8b64be51d86 (patch)
tree04a4e082e00fd4d313346aa8dfc2ce4e5d3ab145 /src/test/com/jogamp
parenteed8508ae1132e5f45f788e9cb3f3d5a1050ac70 (diff)
GLAutoDrawable* refinement of abstraction / generalization - API Change!
- GLAutoDrawable (compat change - recompile): - 'void invoke(boolean wait, GLRunnable glRunnable)' -> 'boolean invoke(boolean wait, GLRunnable glRunnable)' Allows notifying caller whether the task has been executed or at least enqueued. - GLAutoDrawable add 'GLEventListener removeGLEventListener(int index)' - This allow one to remove a specific GLEventListener and reusing it (return value). - GLDrawableImpl remove 'destroy()' to favor 'setRealized(false)' - Using more common code of GLAutoDrawableBase, i.e. GLPbufferImpl can use defaultDestroyOp(). - Removes redundancy of methods - GLAutoDrawableBase/Delegate - better 'default' names to emphasize it's purpose, adding API doc - includes more generic functionality - defaultWindowDestroyNotify() - defaultDestroyOp() - TestGLAutoDrawableDelegateNEWT demonstrates a simple example w/ all window events handled. - Fix TestParenting01cSwingAWT's threading use (gl disturbance thread)
Diffstat (limited to 'src/test/com/jogamp')
-rw-r--r--src/test/com/jogamp/opengl/test/junit/jogl/acore/TestGLAutoDrawableDelegateNEWT.java84
-rw-r--r--src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParenting01cSwingAWT.java112
-rw-r--r--src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParenting02NEWT.java8
3 files changed, 144 insertions, 60 deletions
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestGLAutoDrawableDelegateNEWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestGLAutoDrawableDelegateNEWT.java
index be9ae223b..a2d060a8c 100644
--- a/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestGLAutoDrawableDelegateNEWT.java
+++ b/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestGLAutoDrawableDelegateNEWT.java
@@ -1,5 +1,5 @@
/**
- * Copyright 2010 JogAmp Community. All rights reserved.
+ * Copyright 2012 JogAmp Community. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
@@ -30,60 +30,95 @@ package com.jogamp.opengl.test.junit.jogl.acore;
import java.io.IOException;
-import javax.media.opengl.GLAnimatorControl;
+import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLAutoDrawableDelegate;
import javax.media.opengl.GLCapabilities;
+import javax.media.opengl.GLContext;
+import javax.media.opengl.GLDrawable;
+import javax.media.opengl.GLDrawableFactory;
import javax.media.opengl.GLException;
import javax.media.opengl.GLProfile;
+import org.junit.Assert;
import org.junit.Test;
+import com.jogamp.newt.NewtFactory;
+import com.jogamp.newt.Window;
import com.jogamp.newt.event.WindowAdapter;
import com.jogamp.newt.event.WindowEvent;
+import com.jogamp.newt.event.WindowListener;
import com.jogamp.newt.event.WindowUpdateEvent;
import com.jogamp.opengl.util.Animator;
import com.jogamp.opengl.test.junit.jogl.demos.es2.GearsES2;
-import com.jogamp.opengl.test.junit.util.NEWTGLContext;
+import com.jogamp.opengl.test.junit.util.AWTRobotUtil;
import com.jogamp.opengl.test.junit.util.QuitAdapter;
import com.jogamp.opengl.test.junit.util.UITestCase;
+/**
+ * Demonstrates a full featured custom GLAutoDrawable implementation
+ * utilizing {@link GLAutoDrawableDelegate}.
+ */
public class TestGLAutoDrawableDelegateNEWT extends UITestCase {
- @Test
- public void test01() throws GLException, InterruptedException {
- final NEWTGLContext.WindowContext winctx = NEWTGLContext.createOnscreenWindow(
- new GLCapabilities(GLProfile.getGL2ES2()), 640, 480, false);
- winctx.context.release();
+ /** Note: Creates a full featured GLAutoDrawable w/ all window events connected. */
+ private GLAutoDrawable createGLAutoDrawable(GLCapabilities caps, int x, int y, int width, int height, WindowListener wl) throws InterruptedException {
+ final Window window = NewtFactory.createWindow(caps);
+ Assert.assertNotNull(window);
+ window.setPosition(x, y);
+ window.setSize(width, height);
+ window.setVisible(true);
+ Assert.assertTrue(AWTRobotUtil.waitForVisible(window, true));
+ Assert.assertTrue(AWTRobotUtil.waitForRealized(window, true));
+
+ GLDrawableFactory factory = GLDrawableFactory.getFactory(caps.getGLProfile());
+ GLDrawable drawable = factory.createGLDrawable(window);
+ Assert.assertNotNull(drawable);
+
+ drawable.setRealized(true);
+ Assert.assertTrue(drawable.isRealized());
+
+ GLContext context = drawable.createContext(null);
+ Assert.assertNotNull(context);
+
+ int res = context.makeCurrent();
+ Assert.assertTrue(GLContext.CONTEXT_CURRENT_NEW==res || GLContext.CONTEXT_CURRENT==res);
+ context.release();
+
+ final GLAutoDrawableDelegate glad = new GLAutoDrawableDelegate(drawable, context) {
+ @Override
+ public void destroy() {
+ super.destroy(); // destroys drawable/context
+ window.destroy(); // destroys the actual window
+ }
+ };
- final GLAutoDrawableDelegate glad = new GLAutoDrawableDelegate(winctx.drawable, winctx.context);
- glad.addGLEventListener(new GearsES2(1));
-
// add basic window interaction
- winctx.window.addWindowListener(new WindowAdapter() {
+ window.addWindowListener(new WindowAdapter() {
@Override
public void windowRepaint(WindowUpdateEvent e) {
- glad.defaultRepaintOp();
+ glad.defaultWindowRepaintOp();
}
@Override
public void windowResized(WindowEvent e) {
- glad.defaultReshapeOp();
+ glad.defaultWindowResizedOp();
}
@Override
public void windowDestroyNotify(WindowEvent e) {
- final GLAnimatorControl ctrl = glad.getAnimator();
- boolean isPaused = ctrl.pause();
- glad.destroy();
- NEWTGLContext.destroyWindow(winctx);
- if(isPaused) {
- ctrl.resume();
- }
+ glad.defaultWindowDestroyNotifyOp();
}
});
+ window.addWindowListener(wl);
+ return glad;
+ }
+
+ @Test
+ public void test01() throws GLException, InterruptedException {
final QuitAdapter quitAdapter = new QuitAdapter();
- winctx.window.addWindowListener(quitAdapter);
-
+ GLAutoDrawable glad = createGLAutoDrawable(new GLCapabilities(GLProfile.getGL2ES2()), 0, 0, 640, 480, quitAdapter);
+ glad.addGLEventListener(new GearsES2(1));
+
final Animator animator = new Animator(glad);
animator.setUpdateFPSFrames(60, null);
animator.start();
@@ -93,7 +128,8 @@ public class TestGLAutoDrawableDelegateNEWT extends UITestCase {
}
animator.stop();
- NEWTGLContext.destroyWindow(winctx);
+
+ glad.destroy();
}
static long duration = 2000; // ms
diff --git a/src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParenting01cSwingAWT.java b/src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParenting01cSwingAWT.java
index 22ed7c6fd..41c69336c 100644
--- a/src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParenting01cSwingAWT.java
+++ b/src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParenting01cSwingAWT.java
@@ -66,6 +66,57 @@ public class TestParenting01cSwingAWT extends UITestCase {
glCaps = new GLCapabilities(null);
}
+ static class GLDisturbanceAction implements Runnable {
+ public boolean isRunning = false;
+ private volatile boolean shallStop = false;
+ private final GLAutoDrawable glad;
+ private final GLRunnable glRunnable;
+
+ public GLDisturbanceAction(GLAutoDrawable glad) {
+ this.glad = glad;
+ this.glRunnable = new GLRunnableDummy();
+ }
+
+ public void waitUntilRunning() {
+ synchronized(this) {
+ while(!isRunning) {
+ try {
+ this.wait();
+ } catch (InterruptedException e) { e.printStackTrace(); }
+ }
+ }
+ }
+
+ public void stopAndWaitUntilDone() {
+ shallStop = true;
+ synchronized(this) {
+ while(isRunning) {
+ try {
+ this.wait();
+ } catch (InterruptedException e) { e.printStackTrace(); }
+ }
+ }
+ }
+
+ public void run() {
+ synchronized(this) {
+ isRunning = true;
+ this.notifyAll();
+ System.out.println("$");
+ }
+ while(!shallStop) {
+ try {
+ glad.invoke(true, glRunnable);
+ Thread.sleep(100);
+ } catch (Throwable t) {}
+ }
+ synchronized(this) {
+ isRunning = false;
+ this.notifyAll();
+ }
+ }
+ }
+
@Test
public void testWindowParenting01CreateVisibleDestroy1() throws InterruptedException, InvocationTargetException {
/**
@@ -84,22 +135,9 @@ public class TestParenting01cSwingAWT extends UITestCase {
animator1.setUpdateFPSFrames(1, null);
animator1.start();
- final GLWindow _glWindow1 = glWindow1;
- final GLRunnable _glRunnable = new GLRunnableDummy();
- Thread disturbanceThread = new Thread(new Runnable() {
- public void run() {
- System.out.println("$");
- while(true)
- {
- try {
- _glWindow1.invoke(true, _glRunnable);
- Thread.sleep(100);
- } catch (Throwable t) {}
- }
- }
- });
- disturbanceThread.start();
-
+ final GLDisturbanceAction disturbanceAction = new GLDisturbanceAction(glWindow1);
+ new Thread(disturbanceAction).start();
+ disturbanceAction.waitUntilRunning();
final NewtCanvasAWT newtCanvasAWT = new NewtCanvasAWT(glWindow1);
Assert.assertNotNull(newtCanvasAWT);
@@ -175,6 +213,7 @@ public class TestParenting01cSwingAWT extends UITestCase {
} });
Assert.assertEquals(true, glWindow1.isNativeValid());
+ disturbanceAction.stopAndWaitUntilDone();
glWindow1.destroy();
Assert.assertEquals(false, glWindow1.isNativeValid());
}
@@ -192,26 +231,33 @@ public class TestParenting01cSwingAWT extends UITestCase {
glWindow1.setTitle("testWindowParenting01CreateVisibleDestroy");
GLEventListener demo1 = new RedSquareES2();
setDemoFields(demo1, glWindow1, false);
+ /*
+ glWindow1.addGLEventListener(new GLEventListener() {
+ @Override
+ public void init(GLAutoDrawable drawable) {
+ System.err.println("XXX init");
+ }
+ @Override
+ public void dispose(GLAutoDrawable drawable) {
+ System.err.println("XXX dispose");
+ // Thread.dumpStack();
+ }
+ @Override
+ public void display(GLAutoDrawable drawable) {}
+ @Override
+ public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
+ System.err.println("XXX reshape");
+ // Thread.dumpStack();
+ }
+ }); */
glWindow1.addGLEventListener(demo1);
Animator animator1 = new Animator(glWindow1);
animator1.setUpdateFPSFrames(1, null);
animator1.start();
-
- final GLWindow _glWindow1 = glWindow1;
- final GLRunnable _glRunnable = new GLRunnableDummy();
- Thread disturbanceThread = new Thread(new Runnable() {
- public void run() {
- System.out.println("$");
- while(true)
- {
- try {
- _glWindow1.invoke(true, _glRunnable);
- Thread.sleep(100);
- } catch (Throwable t) {}
- }
- }
- });
- disturbanceThread.start();
+
+ final GLDisturbanceAction disturbanceAction = new GLDisturbanceAction(glWindow1);
+ new Thread(disturbanceAction).start();
+ disturbanceAction.waitUntilRunning();
final NewtCanvasAWT newtCanvasAWT = new NewtCanvasAWT(glWindow1);
Assert.assertNotNull(newtCanvasAWT);
@@ -298,6 +344,8 @@ public class TestParenting01cSwingAWT extends UITestCase {
animator1.stop();
Assert.assertEquals(false, animator1.isAnimating());
+ disturbanceAction.stopAndWaitUntilDone();
+
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
jFrame1.setVisible(false);
diff --git a/src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParenting02NEWT.java b/src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParenting02NEWT.java
index bc3988338..8e2c73e9d 100644
--- a/src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParenting02NEWT.java
+++ b/src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParenting02NEWT.java
@@ -111,8 +111,8 @@ public class TestParenting02NEWT extends UITestCase {
Assert.assertEquals(height,glWindow1.getHeight());
glWindow1.setTitle("testWindowParenting01NewtOnNewtParentChildDraw - PARENT");
glWindow1.setPosition(x,y);
- glWindow1.addKeyListener(new TraceKeyAdapter(new KeyAction(eventFifo)));
- glWindow1.addWindowListener(new TraceWindowAdapter());
+ //glWindow1.addKeyListener(new TraceKeyAdapter(new KeyAction(eventFifo)));
+ //glWindow1.addWindowListener(new TraceWindowAdapter());
GLEventListener demo1 = new RedSquareES2();
setDemoFields(demo1, window1, glWindow1, false);
@@ -132,8 +132,8 @@ public class TestParenting02NEWT extends UITestCase {
//Assert.assertEquals(height/2,glWindow2.getHeight());
glWindow2.setTitle("testWindowParenting01NewtOnNewtParentChildDraw - CHILD");
glWindow2.setPosition(glWindow1.getWidth()/2, glWindow1.getHeight()/2);
- glWindow2.addKeyListener(new TraceKeyAdapter(new KeyAction(eventFifo)));
- glWindow2.addWindowListener(new TraceWindowAdapter(new WindowAction(eventFifo)));
+ //glWindow2.addKeyListener(new TraceKeyAdapter(new KeyAction(eventFifo)));
+ //glWindow2.addWindowListener(new TraceWindowAdapter(new WindowAction(eventFifo)));
// glWindow2.addMouseListener(new TraceMouseAdapter());
GLEventListener demo2 = new GearsES2();