diff options
author | Sven Gothel <[email protected]> | 2012-01-08 06:52:03 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2012-01-08 06:52:03 +0100 |
commit | 9e61d4529143ff3f6de15ce55f8e8747f67a86c9 (patch) | |
tree | e1bb4cee6e0f3f7859de658d12d49f9597590831 /src | |
parent | 6451e3c0c79fca92a39e32c2600c69f16dfc7f4d (diff) |
TestAWTCardLayoutAnimatorStartStopBug532: Refine, add 'continue' mode, ..
Previous commit 098398c2a9145447da5314eed9792b3738c2d515 cleaned up
and fixed context/drawable lock/unlock for makeCurrent()/release()/destroy()
and consistency is looks much better now in this regard.
However, on Intel HD 3000 / Windows7, our AnimatorControl start/stop still
let the 2nd switch to GLCanvas within the CardPanel not showing rendering results.
One interesting artefact though:
1st switch 2 GLCanvas (rendering visible):
*** hdc 0x2f010ec5, hdw(hdc) 0x1003a0, hdw 0x1003a0 - AWT-EventQueue-0, com.jogamp.opengl.util.Animator[started true, animating true, paused false, drawable 1]
*** hdc 0x160110c4, hdw(hdc) 0x1003a0, hdw 0x1003a0 - AWT-EventQueue-0, com.jogamp.opengl.util.Animator[started true, animating true, paused false, drawable 1]
*** hdc 0x2f010ec5, hdw(hdc) 0x1003a0, hdw 0x1003a0 - AWT-EventQueue-0, com.jogamp.opengl.util.Animator[started true, animating true, paused false, drawable 1]
*** hdc 0x160110c4, hdw(hdc) 0x1003a0, hdw 0x1003a0 - AWT-EventQueue-0, com.jogamp.opengl.util.Animator[started true, animating true, paused false, drawable 1]
-> alternating HDC's
2nd switch 2 GLCanvas (rendering _not_ visible):
*** hdc 0x160110c4, hdw(hdc) 0x1003a0, hdw 0x1003a0 - AWT-EventQueue-0, com.jogamp.opengl.util.Animator[started true, animating true, paused false, drawable 1]
*** hdc 0x160110c4, hdw(hdc) 0x1003a0, hdw 0x1003a0 - AWT-EventQueue-0, com.jogamp.opengl.util.Animator[started true, animating true, paused false, drawable 1]
*** hdc 0x160110c4, hdw(hdc) 0x1003a0, hdw 0x1003a0 - AWT-EventQueue-0, com.jogamp.opengl.util.Animator[started true, animating true, paused false, drawable 1]
*** hdc 0x160110c4, hdw(hdc) 0x1003a0, hdw 0x1003a0 - AWT-EventQueue-0, com.jogamp.opengl.util.Animator[started true, animating true, paused false, drawable 1]
-> fixed HDC
Maybe this is a hint for what is going wrong in JAWTWindow locking,
which aquires the frame's HDC.
Verifying the recursive lock shows proper lock/unlock actions though.
Diffstat (limited to 'src')
-rw-r--r-- | src/test/com/jogamp/opengl/test/junit/jogl/awt/TestAWTCardLayoutAnimatorStartStopBug532.java | 111 |
1 files changed, 82 insertions, 29 deletions
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/awt/TestAWTCardLayoutAnimatorStartStopBug532.java b/src/test/com/jogamp/opengl/test/junit/jogl/awt/TestAWTCardLayoutAnimatorStartStopBug532.java index 83578acdd..d230f153e 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/awt/TestAWTCardLayoutAnimatorStartStopBug532.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/awt/TestAWTCardLayoutAnimatorStartStopBug532.java @@ -9,8 +9,11 @@ import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.lang.reflect.InvocationTargetException; +import javax.media.nativewindow.NativeWindow; import javax.media.opengl.GLAnimatorControl; +import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCapabilities; +import javax.media.opengl.GLEventListener; import javax.media.opengl.GLProfile; import javax.media.opengl.awt.GLCanvas; import javax.swing.JComboBox; @@ -18,8 +21,11 @@ import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; +import jogamp.nativewindow.windows.GDI; + import org.junit.Test; +import com.jogamp.common.os.Platform; import com.jogamp.opengl.test.junit.jogl.demos.es2.GearsES2; import com.jogamp.opengl.test.junit.util.MiscUtils; import com.jogamp.opengl.test.junit.util.UITestCase; @@ -30,6 +36,10 @@ public class TestAWTCardLayoutAnimatorStartStopBug532 extends UITestCase { static final String LABEL = "Label"; static final String CANVAS = "GLCanvas"; + public enum AnimatorControlBehavior { + StartStop, PauseResume, Continue; + } + static long durationPerTest = 200*4; // ms static boolean manual = false; static volatile boolean shouldStop = false; @@ -38,37 +48,70 @@ public class TestAWTCardLayoutAnimatorStartStopBug532 extends UITestCase { @Test public void testFPSAnimatorStartStop() throws InterruptedException, InvocationTargetException { - testImpl(true, true); + testImpl(AnimatorControlBehavior.StartStop, true); } @Test public void testFPSAnimatorResumePause() throws InterruptedException, InvocationTargetException { - testImpl(false, true); + testImpl(AnimatorControlBehavior.PauseResume, true); + } + + @Test + public void testFPSAnimatorContinue() throws InterruptedException, InvocationTargetException { + testImpl(AnimatorControlBehavior.Continue, true); } @Test public void testAnimatorStartStop() throws InterruptedException, InvocationTargetException { - testImpl(true, false); + testImpl(AnimatorControlBehavior.StartStop, false); } @Test public void testAnimatorResumePause() throws InterruptedException, InvocationTargetException { - testImpl(false, false); + testImpl(AnimatorControlBehavior.PauseResume, false); + } + + @Test + public void testAnimatorContinue() throws InterruptedException, InvocationTargetException { + testImpl(AnimatorControlBehavior.Continue, false); } - void testImpl(final boolean useAnimStartStop, boolean useFPSAnimator) throws InterruptedException, InvocationTargetException { + void testImpl(final AnimatorControlBehavior animCtrl, boolean useFPSAnimator) throws InterruptedException, InvocationTargetException { final GLProfile glp = GLProfile.get(GLProfile.GL2); final GLCapabilities caps = new GLCapabilities(glp); final GLCanvas canvas = new GLCanvas(caps); canvas.setPreferredSize(new Dimension(640, 480)); - canvas.addGLEventListener(new GearsES2(1)); final GLAnimatorControl animatorCtrl = useFPSAnimator ? new FPSAnimator(canvas, 60) : new Animator(canvas); animatorCtrl.setUpdateFPSFrames(60, System.err); - if(!useAnimStartStop) { - animatorCtrl.start(); - animatorCtrl.pause(); + switch (animCtrl) { + case PauseResume: + animatorCtrl.start(); + animatorCtrl.pause(); + break; + case Continue: + animatorCtrl.start(); + break; + } + + canvas.addGLEventListener(new GearsES2(1)); + if(Platform.OS_TYPE == Platform.OSType.WINDOWS) { + canvas.addGLEventListener(new GLEventListener() { + public void init(GLAutoDrawable drawable) { } + public void dispose(GLAutoDrawable drawable) { } + public void display(GLAutoDrawable drawable) { + final NativeWindow win = (NativeWindow) drawable.getNativeSurface(); + long hdc = win.getSurfaceHandle(); + long hdw = win.getWindowHandle(); + long hdw_hdc = GDI.WindowFromDC(hdc); + // System.err.println("*** hdc 0x"+Long.toHexString(hdc)+", hdw(hdc) 0x"+Long.toHexString(hdw_hdc)+", hdw 0x"+Long.toHexString(hdw) + " - " + Thread.currentThread().getName() + ", " + animatorCtrl); + // System.err.println(drawable.getNativeSurface().toString()); + } + public void reshape(GLAutoDrawable drawable, int x, int y, int width, + int height) { } + }); } + final JFrame frame = new JFrame(); frame.setTitle(getSimpleTestName()); frame.addWindowListener(new WindowAdapter() { @@ -84,30 +127,40 @@ public class TestAWTCardLayoutAnimatorStartStopBug532 extends UITestCase { final JComboBox comboBox = new JComboBox(new String[] { LABEL, CANVAS }); comboBox.setEditable(false); comboBox.addItemListener(new ItemListener() { - public void itemStateChanged(ItemEvent evt) { - final String os = selected; - CardLayout cl = (CardLayout)(cards.getLayout()); - String s = (String)evt.getItem(); - if(s.equals(CANVAS)) { - if(useAnimStartStop) { - animatorCtrl.start(); - } else { - animatorCtrl.resume(); - } - cl.show(cards, CANVAS); - selected = CANVAS; - } else if(s.equals(LABEL)) { - if(useAnimStartStop) { - animatorCtrl.stop(); + public void itemStateChanged(final ItemEvent evt) { + final CardLayout cl = (CardLayout)(cards.getLayout()); + final String newSelection = (String)evt.getItem(); + if(!newSelection.equals(selected)) { + final String oldSelected = selected; + if(newSelection.equals(CANVAS)) { + switch (animCtrl) { + case StartStop: + animatorCtrl.start(); + break; + case PauseResume: + animatorCtrl.resume(); + break; + } + cl.show(cards, CANVAS); + selected = CANVAS; + } else if(newSelection.equals(LABEL)) { + switch (animCtrl) { + case StartStop: + animatorCtrl.stop(); + break; + case PauseResume: + animatorCtrl.pause(); + break; + } + cl.show(cards, LABEL); + selected = LABEL; } else { - animatorCtrl.pause(); + throw new RuntimeException("oops .. unexpected item: "+evt); } - cl.show(cards, LABEL); - selected = LABEL; + System.err.println("Item Change: "+oldSelected+" -> "+selected+", "+animatorCtrl); } else { - throw new RuntimeException("oops .. unexpected item: "+evt); + System.err.println("Item Stays: "+selected+", "+animatorCtrl); } - System.err.println("Item Change "+os+" -> "+selected+", "+animatorCtrl); } }); comboBoxPanel.add(comboBox); |