diff options
Diffstat (limited to 'src/test/com/jogamp/opengl')
11 files changed, 388 insertions, 354 deletions
diff --git a/src/test/com/jogamp/opengl/test/android/MovieSimpleActivity1.java b/src/test/com/jogamp/opengl/test/android/MovieSimpleActivity1.java index fc08301cb..5cbcb7380 100644 --- a/src/test/com/jogamp/opengl/test/android/MovieSimpleActivity1.java +++ b/src/test/com/jogamp/opengl/test/android/MovieSimpleActivity1.java @@ -33,6 +33,7 @@ import java.net.URISyntaxException; import java.net.URLConnection; import java.util.Arrays; +import javax.media.nativewindow.util.Rectangle; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLProfile; @@ -46,7 +47,6 @@ import com.jogamp.newt.Window; import com.jogamp.newt.event.MouseAdapter; import com.jogamp.newt.event.MouseEvent; import com.jogamp.newt.opengl.GLWindow; - import com.jogamp.opengl.test.junit.jogl.demos.es2.av.MovieSimple; import com.jogamp.opengl.util.Animator; import com.jogamp.opengl.util.av.GLMediaPlayer; @@ -120,7 +120,7 @@ public class MovieSimpleActivity1 extends NewtBaseActivity { { final int padding = mPlayerHUD ? 32 : 0; final android.view.View androidView = ((jogamp.newt.driver.android.WindowDriver)glWindowMain.getDelegatedWindow()).getAndroidView(); - glWindowMain.setSize(scrn.getWidth()-padding, scrn.getHeight()-padding); + glWindowMain.setSurfaceSize(scrn.getWidth()-padding, scrn.getHeight()-padding); glWindowMain.setUndecorated(true); // setContentView(getWindow(), glWindowMain); viewGroup.addView(androidView, new android.widget.FrameLayout.LayoutParams(glWindowMain.getSurfaceWidth(), glWindowMain.getSurfaceHeight(), Gravity.BOTTOM|Gravity.RIGHT)); @@ -172,15 +172,13 @@ public class MovieSimpleActivity1 extends NewtBaseActivity { public boolean run(GLAutoDrawable drawable) { final GLMediaPlayer mPlayerSub; final MovieSimple demoHUD; - int x2 = scrn.getX(); - int y2 = scrn.getY(); - int w2 = scrn.getWidth()/3; - int h2 = scrn.getHeight()/3; + final Rectangle windowBounds = scrn.getViewportInWindowUnits(glWindowHUD); if(null != mPlayerShared) { if(0 < mPlayerShared.getWidth() && mPlayerShared.getWidth()<scrn.getWidth()/2 && 0 < mPlayerShared.getHeight() && mPlayerShared.getHeight()<scrn.getHeight()/2) { - w2 = mPlayerShared.getWidth(); - h2 = mPlayerShared.getHeight(); + final int[] wh = glWindowHUD.convertToWindowUnits(new int[]{mPlayerShared.getWidth(), mPlayerShared.getHeight()}); + windowBounds.setWidth( wh[0] ); + windowBounds.setHeight( wh[1] ); } glWindowHUD.setSharedContext(glWindowMain.getContext()); demoHUD = new MovieSimple(mPlayerShared); @@ -209,10 +207,10 @@ public class MovieSimpleActivity1 extends NewtBaseActivity { }); demoHUD.initStream(streamLoc1, GLMediaPlayer.STREAM_ID_AUTO, GLMediaPlayer.STREAM_ID_AUTO, 0); - glWindowHUD.setPosition(x2, y2); - glWindowHUD.setSize(w2, h2); + glWindowHUD.setPosition(windowBounds.getX(), windowBounds.getY()); + glWindowHUD.setSize(windowBounds.getWidth(), windowBounds.getHeight()); System.err.println("HUD: "+mPlayerHUD); - System.err.println("HUD: "+w2+"x"+h2); + System.err.println("HUD: "+windowBounds); glWindowHUD.addMouseListener(toFrontMouseListener); viewGroup.post(new Runnable() { diff --git a/src/test/com/jogamp/opengl/test/android/NEWTGearsES2TransActivity.java b/src/test/com/jogamp/opengl/test/android/NEWTGearsES2TransActivity.java index beaf60460..a07d3c97b 100644 --- a/src/test/com/jogamp/opengl/test/android/NEWTGearsES2TransActivity.java +++ b/src/test/com/jogamp/opengl/test/android/NEWTGearsES2TransActivity.java @@ -3,14 +3,14 @@ * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. Redistributions 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. - * + * * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR @@ -20,7 +20,7 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. @@ -46,24 +46,24 @@ import android.util.Log; public class NEWTGearsES2TransActivity extends NewtBaseActivity { static String TAG = "NEWTGearsES2TransActivity"; - + @Override public void onCreate(Bundle savedInstanceState) { Log.d(TAG, "onCreate - 0"); super.onCreate(savedInstanceState); - + // create GLWindow (-> incl. underlying NEWT Display, Screen & Window) GLCapabilities caps = new GLCapabilities(GLProfile.get(GLProfile.GL2ES2)); caps.setBackgroundOpaque(false); - + Log.d(TAG, "req caps: "+caps); Screen screen = NewtFactory.createScreen(NewtFactory.createDisplay(null), 0); screen.addReference(); GLWindow glWindow = GLWindow.create(screen, caps); - glWindow.setSize(2*screen.getWidth()/3, 2*screen.getHeight()/3); + glWindow.setSurfaceSize(2*screen.getWidth()/3, 2*screen.getHeight()/3); glWindow.setUndecorated(true); setContentView(getWindow(), glWindow); - + glWindow.addGLEventListener(new GearsES2(-1)); glWindow.getScreen().addMonitorModeListener(new MonitorModeListener() { @Override @@ -75,14 +75,14 @@ public class NEWTGearsES2TransActivity extends NewtBaseActivity { }); Animator animator = new Animator(glWindow); // glWindow.setSkipContextReleaseThread(animator.getThread()); - + glWindow.setVisible(true); - + animator.setUpdateFPSFrames(60, System.err); animator.resetFPSCounter(); glWindow.resetFPSCounter(); - + screen.removeReference(); Log.d(TAG, "onCreate - X"); - } + } } diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/acore/InitConcurrentBaseNEWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/acore/InitConcurrentBaseNEWT.java index f1bc0ab7a..00001d8d2 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/acore/InitConcurrentBaseNEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/acore/InitConcurrentBaseNEWT.java @@ -3,14 +3,14 @@ * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. Redistributions 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. - * + * * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR @@ -20,12 +20,12 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. */ - + package com.jogamp.opengl.test.junit.jogl.acore; import javax.media.nativewindow.Capabilities; @@ -55,44 +55,45 @@ import com.jogamp.opengl.util.Animator; */ public abstract class InitConcurrentBaseNEWT extends UITestCase { - static final int demoSize = 128; - + static final int demoWinSize = 128; + static long duration = 300; // ms - + static InsetsImmutable insets = null; - static int scrnHeight, scrnWidth; static int num_x, num_y; - + @BeforeClass public static void initClass() { Window dummyWindow = NewtFactory.createWindow(new Capabilities()); - dummyWindow.setSize(demoSize, demoSize); + dummyWindow.setSize(demoWinSize, demoWinSize); dummyWindow.setVisible(true); Assert.assertEquals(true, dummyWindow.isVisible()); Assert.assertEquals(true, dummyWindow.isNativeValid()); - insets = dummyWindow.getInsets(); - scrnHeight = dummyWindow.getScreen().getHeight(); - scrnWidth = dummyWindow.getScreen().getWidth(); - num_x = scrnWidth / ( demoSize + insets.getTotalWidth() ) - 2; - num_y = scrnHeight / ( demoSize + insets.getTotalHeight() ) - 2; + insets = dummyWindow.getInsets(); + final int scrnHeight = dummyWindow.getScreen().getHeight(); + final int scrnWidth = dummyWindow.getScreen().getWidth(); + final int[] demoScreenSize = dummyWindow.convertToPixelUnits(new int[] { demoWinSize, demoWinSize }); + final int[] insetsScreenSize = dummyWindow.convertToPixelUnits(new int[] { insets.getTotalWidth(), insets.getTotalHeight() }); + num_x = scrnWidth / ( demoScreenSize[0] + insetsScreenSize[0] ) - 2; + num_y = scrnHeight / ( demoScreenSize[1] + insetsScreenSize[1] ) - 2; dummyWindow.destroy(); } - + public class JOGLTask implements Runnable { private final int id; private final Object postSync; private final boolean reuse; private boolean done = false; - + public JOGLTask(Object postSync, int id, boolean reuse) { this.postSync = postSync; this.id = id; this.reuse = reuse; } public void run() { - int x = ( id % num_x ) * ( demoSize + insets.getTotalHeight() ); - int y = ( (id / num_x) % num_y ) * ( demoSize + insets.getTotalHeight() ); - + int x = ( id % num_x ) * ( demoWinSize + insets.getTotalHeight() ); + int y = ( (id / num_x) % num_y ) * ( demoWinSize + insets.getTotalHeight() ); + System.err.println("JOGLTask "+id+": START: "+x+"/"+y+", reuse "+reuse+" - "+Thread.currentThread().getName()); final Display display = NewtFactory.createDisplay(null, reuse); final Screen screen = NewtFactory.createScreen(display, 0); @@ -100,25 +101,25 @@ public abstract class InitConcurrentBaseNEWT extends UITestCase { Assert.assertNotNull(glWindow); glWindow.setTitle("Task "+id); glWindow.setPosition(x + insets.getLeftWidth(), y + insets.getTopHeight() ); - + glWindow.addGLEventListener(new ValidateLockListener()); glWindow.addGLEventListener(new GearsES2(0)); - + Animator animator = new Animator(glWindow); - - glWindow.setSize(demoSize, demoSize); + + glWindow.setSize(demoWinSize, demoWinSize); glWindow.setVisible(true); animator.setUpdateFPSFrames(60, null); - + System.err.println("JOGLTask "+id+": INITIALIZED: "+", "+display+" - "+Thread.currentThread().getName()); - + animator.start(); Assert.assertEquals(true, animator.isAnimating()); Assert.assertEquals(true, glWindow.isVisible()); Assert.assertEquals(true, glWindow.isNativeValid()); Assert.assertEquals(true, glWindow.isRealized()); System.err.println("JOGLTask "+id+": RUNNING: "+Thread.currentThread().getName()); - + while(animator.isAnimating() && animator.getTotalFPSDuration()<duration) { try { Thread.sleep(100); @@ -126,10 +127,10 @@ public abstract class InitConcurrentBaseNEWT extends UITestCase { e.printStackTrace(); } } - + animator.stop(); glWindow.destroy(); - + System.err.println("JOGLTask "+id+": DONE/SYNC: "+Thread.currentThread().getName()); synchronized (postSync) { done = true; @@ -137,7 +138,7 @@ public abstract class InitConcurrentBaseNEWT extends UITestCase { postSync.notifyAll(); } } - + public boolean done() { return done; } } @@ -161,7 +162,7 @@ public abstract class InitConcurrentBaseNEWT extends UITestCase { sb.append("]"); return sb.toString(); } - + protected static boolean isDead(Thread[] threads) { for(int i=threads.length-1; i>=0; i--) { if(threads[i].isAlive()) { @@ -182,7 +183,7 @@ public abstract class InitConcurrentBaseNEWT extends UITestCase { sb.append("]"); return sb.toString(); } - + protected void runJOGLTasks(int num, boolean reuse) throws InterruptedException { System.err.println("InitConcurrentBaseNEWT "+num+" threads, reuse display: "+reuse); final String currentThreadName = Thread.currentThread().getName(); @@ -194,8 +195,8 @@ public abstract class InitConcurrentBaseNEWT extends UITestCase { tasks[i] = new JOGLTask(syncDone, i, reuse); threads[i] = new Thread(tasks[i], currentThreadName+"-jt"+i); } - final long t0 = System.currentTimeMillis(); - + final long t0 = System.currentTimeMillis(); + for(i=0; i<num; i++) { threads[i].start(); } @@ -213,13 +214,13 @@ public abstract class InitConcurrentBaseNEWT extends UITestCase { } final long t1 = System.currentTimeMillis(); System.err.println("total: "+(t1-t0)/1000.0+"s"); - + Assert.assertTrue("Tasks are incomplete. Complete: "+doneDump(tasks), done(tasks)); i=0; while(i<30 && !isDead(threads)) { Thread.sleep(100); i++; } - Assert.assertTrue("Threads are still alive after 3s. Alive: "+isAliveDump(threads), isDead(threads)); - } + Assert.assertTrue("Threads are still alive after 3s. Alive: "+isAliveDump(threads), isDead(threads)); + } } diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/acore/ect/ExclusiveContextBase00.java b/src/test/com/jogamp/opengl/test/junit/jogl/acore/ect/ExclusiveContextBase00.java index 4980e8562..f1a185c31 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/acore/ect/ExclusiveContextBase00.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/acore/ect/ExclusiveContextBase00.java @@ -3,14 +3,14 @@ * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. Redistributions 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. - * + * * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR @@ -20,12 +20,12 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. */ - + package com.jogamp.opengl.test.junit.jogl.acore.ect; import com.jogamp.newt.NewtFactory; @@ -54,44 +54,45 @@ import org.junit.FixMethodOrder; import org.junit.runners.MethodSorters; /** - * ExclusiveContextThread base implementation to test correctness of the ExclusiveContext feature _and_ AnimatorBase. + * ExclusiveContextThread base implementation to test correctness of the ExclusiveContext feature _and_ AnimatorBase. */ @FixMethodOrder(MethodSorters.NAME_ASCENDING) public abstract class ExclusiveContextBase00 extends UITestCase { static boolean testExclusiveWithAWT = false; - static final int durationParts = 9; + static final int durationParts = 9; static long duration = 320 * durationParts; // ms ~ 20 frames - + static boolean showFPS = false; static int showFPSRate = 100; - - static final int demoSize = 128; - + + static final int demoWinSize = 128; + static InsetsImmutable insets = null; - static int scrnHeight, scrnWidth; static int num_x, num_y; - + static int swapInterval = 0; - + @BeforeClass public static void initClass00() { Window dummyWindow = NewtFactory.createWindow(new Capabilities()); - dummyWindow.setSize(demoSize, demoSize); + dummyWindow.setSize(demoWinSize, demoWinSize); dummyWindow.setVisible(true); Assert.assertEquals(true, dummyWindow.isVisible()); Assert.assertEquals(true, dummyWindow.isNativeValid()); - insets = dummyWindow.getInsets(); - scrnHeight = dummyWindow.getScreen().getHeight(); - scrnWidth = dummyWindow.getScreen().getWidth(); - num_x = scrnWidth / ( demoSize + insets.getTotalWidth() ) - 2; - num_y = scrnHeight / ( demoSize + insets.getTotalHeight() ) - 2; + insets = dummyWindow.getInsets(); + final int scrnHeight = dummyWindow.getScreen().getHeight(); + final int scrnWidth = dummyWindow.getScreen().getWidth(); + final int[] demoScreenSize = dummyWindow.convertToPixelUnits(new int[] { demoWinSize, demoWinSize }); + final int[] insetsScreenSize = dummyWindow.convertToPixelUnits(new int[] { insets.getTotalWidth(), insets.getTotalHeight() }); + num_x = scrnWidth / ( demoScreenSize[0] + insetsScreenSize[0] ) - 2; + num_y = scrnHeight / ( demoScreenSize[1] + insetsScreenSize[1] ) - 2; dummyWindow.destroy(); } @AfterClass public static void releaseClass00() { } - + protected abstract boolean isAWTTestCase(); protected abstract Thread getAWTRenderThread(); protected abstract AnimatorBase createAnimator(); @@ -120,16 +121,16 @@ public abstract class ExclusiveContextBase00 extends UITestCase { } final GLAutoDrawable[] drawables = new GLAutoDrawable[drawableCount]; for(int i=0; i<drawableCount; i++) { - final int x = ( i % num_x ) * ( demoSize + insets.getTotalHeight() ) + insets.getLeftWidth(); - final int y = ( (i / num_x) % num_y ) * ( demoSize + insets.getTotalHeight() ) + insets.getTopHeight(); - - drawables[i] = createGLAutoDrawable("Win #"+i, x, y, demoSize, demoSize, caps); + final int x = ( i % num_x ) * ( demoWinSize + insets.getTotalHeight() ) + insets.getLeftWidth(); + final int y = ( (i / num_x) % num_y ) * ( demoWinSize + insets.getTotalHeight() ) + insets.getTopHeight(); + + drawables[i] = createGLAutoDrawable("Win #"+i, x, y, demoWinSize, demoWinSize, caps); Assert.assertNotNull(drawables[i]); final GearsES2 demo = new GearsES2(swapInterval); demo.setVerbose(false); drawables[i].addGLEventListener(demo); } - + if( preAdd ) { for(int i=0; i<drawableCount; i++) { animator.add(drawables[i]); @@ -144,10 +145,10 @@ public abstract class ExclusiveContextBase00 extends UITestCase { } Assert.assertFalse(animator.isAnimating()); Assert.assertFalse(animator.isStarted()); - + // Animator Start Assert.assertTrue(animator.start()); - + Assert.assertTrue(animator.isStarted()); if( preAdd ) { Assert.assertTrue(animator.isAnimating()); @@ -166,7 +167,7 @@ public abstract class ExclusiveContextBase00 extends UITestCase { Assert.assertTrue(animator.isAnimating()); } Assert.assertEquals(exclusive, animator.isExclusiveContextEnabled()); - + // After start, ExclusiveContextThread is set { final Thread ect = animator.getExclusiveContextThread(); @@ -178,14 +179,14 @@ public abstract class ExclusiveContextBase00 extends UITestCase { } } else { Assert.assertEquals(null, ect); - } + } for(int i=0; i<drawableCount; i++) { Assert.assertEquals(ect, drawables[i].getExclusiveContextThread()); } setGLAutoDrawableVisible(drawables); } animator.setUpdateFPSFrames(showFPSRate, showFPS ? System.err : null); - + // Normal run .. Thread.sleep(duration/durationParts); // 1 @@ -197,19 +198,19 @@ public abstract class ExclusiveContextBase00 extends UITestCase { Assert.assertEquals(awtRenderThread, ect); } else { Assert.assertEquals(animator.getThread(), ect); - } + } for(int i=0; i<drawableCount; i++) { final Thread t = drawables[i].setExclusiveContextThread(null); Assert.assertEquals(ect, t); } - + Thread.sleep(duration/durationParts); // 2 - + for(int i=0; i<drawableCount; i++) { // poll until clearing drawable ECT is established { boolean ok = null == drawables[i].getExclusiveContextThread(); - int c = 0; + int c = 0; while(!ok && c<5*50) { // 5*50*20 = 5s TO Thread.sleep(20); ok = null == drawables[i].getExclusiveContextThread(); @@ -223,10 +224,10 @@ public abstract class ExclusiveContextBase00 extends UITestCase { final Thread t = drawables[i].setExclusiveContextThread(ect); Assert.assertEquals(null, t); } - + Thread.sleep(duration/durationParts); // 3 } - + // Disable/Enable exclusive mode via Animator for all GLAutoDrawable if(exclusive) { final Thread ect = animator.getExclusiveContextThread(); @@ -234,31 +235,31 @@ public abstract class ExclusiveContextBase00 extends UITestCase { Assert.assertEquals(awtRenderThread, ect); } else { Assert.assertEquals(animator.getThread(), ect); - } - + } + Assert.assertEquals(true, animator.setExclusiveContext(false)); Assert.assertFalse(animator.isExclusiveContextEnabled()); for(int i=0; i<drawableCount; i++) { Assert.assertEquals(null, drawables[i].getExclusiveContextThread()); } - + Thread.sleep(duration/durationParts); // 4 - + Assert.assertEquals(null, animator.setExclusiveContext(ect)); Assert.assertTrue(animator.isExclusiveContextEnabled()); Assert.assertEquals(ect, animator.getExclusiveContextThread()); for(int i=0; i<drawableCount; i++) { Assert.assertEquals(ect, drawables[i].getExclusiveContextThread()); } - + Thread.sleep(duration/durationParts); // 5 - } - + } + Assert.assertEquals(exclusive, animator.isExclusiveContextEnabled()); Assert.assertTrue(animator.isStarted()); Assert.assertTrue(animator.isAnimating()); Assert.assertFalse(animator.isPaused()); - + // Animator Pause Assert.assertTrue(animator.pause()); Assert.assertTrue(animator.isStarted()); @@ -277,9 +278,9 @@ public abstract class ExclusiveContextBase00 extends UITestCase { } for(int i=0; i<drawableCount; i++) { Assert.assertEquals(null, drawables[i].getExclusiveContextThread()); - } + } Thread.sleep(duration/durationParts); // 6 - + // Animator Resume Assert.assertTrue(animator.resume()); Assert.assertTrue(animator.isStarted()); @@ -295,32 +296,32 @@ public abstract class ExclusiveContextBase00 extends UITestCase { } for(int i=0; i<drawableCount; i++) { Assert.assertEquals(ect, drawables[i].getExclusiveContextThread()); - } + } } else { Assert.assertEquals(null, animator.getExclusiveContextThread()); for(int i=0; i<drawableCount; i++) { Assert.assertEquals(null, drawables[i].getExclusiveContextThread()); - } + } } Thread.sleep(duration/durationParts); // 7 - + // Animator Stop #1 - Assert.assertTrue(animator.stop()); + Assert.assertTrue(animator.stop()); Assert.assertFalse(animator.isAnimating()); Assert.assertFalse(animator.isStarted()); - Assert.assertFalse(animator.isPaused()); + Assert.assertFalse(animator.isPaused()); Assert.assertEquals(exclusive, animator.isExclusiveContextEnabled()); Assert.assertEquals(null, animator.getExclusiveContextThread()); for(int i=0; i<drawableCount; i++) { Assert.assertEquals(null, drawables[i].getExclusiveContextThread()); } Thread.sleep(duration/durationParts); // 8 - + // Animator Re-Start - Assert.assertTrue(animator.start()); + Assert.assertTrue(animator.start()); Assert.assertTrue(animator.isStarted()); Assert.assertTrue(animator.isAnimating()); - Assert.assertEquals(exclusive, animator.isExclusiveContextEnabled()); + Assert.assertEquals(exclusive, animator.isExclusiveContextEnabled()); // After start, ExclusiveContextThread is set { final Thread ect = animator.getExclusiveContextThread(); @@ -332,13 +333,13 @@ public abstract class ExclusiveContextBase00 extends UITestCase { } } else { Assert.assertEquals(null, ect); - } + } for(int i=0; i<drawableCount; i++) { Assert.assertEquals(ect, drawables[i].getExclusiveContextThread()); } } Thread.sleep(duration/durationParts); // 9 - + // Remove all drawables .. while running! for(int i=0; i<drawableCount; i++) { final GLAutoDrawable drawable = drawables[i]; @@ -348,22 +349,22 @@ public abstract class ExclusiveContextBase00 extends UITestCase { Assert.assertTrue(animator.isStarted()); Assert.assertFalse(animator.isAnimating()); // no drawables in list! } // !shortenTest - + // Animator Stop #2 - Assert.assertTrue(animator.stop()); + Assert.assertTrue(animator.stop()); Assert.assertFalse(animator.isAnimating()); Assert.assertFalse(animator.isStarted()); - Assert.assertFalse(animator.isPaused()); + Assert.assertFalse(animator.isPaused()); Assert.assertEquals(exclusive, animator.isExclusiveContextEnabled()); Assert.assertEquals(null, animator.getExclusiveContextThread()); - + // Destroy GLWindows for(int i=0; i<drawableCount; i++) { destroyGLAutoDrawableVisible(drawables[i]); Assert.assertEquals(true, AWTRobotUtil.waitForRealized(drawables[i], false)); - } - } - + } + } + @Test public void test01NormalPre_1Win() throws InterruptedException { final GLProfile glp = GLProfile.getGL2ES2(); @@ -384,40 +385,40 @@ public abstract class ExclusiveContextBase00 extends UITestCase { final GLCapabilities caps = new GLCapabilities( glp ); runTestGL(caps, 1 /* numWin */, true /* exclusive */, true /* preAdd */, false /* short */); } - + @Test public void test04ExclPost_1Win() throws InterruptedException { final GLProfile glp = GLProfile.getGL2ES2(); final GLCapabilities caps = new GLCapabilities( glp ); runTestGL(caps, 1 /* numWin */, true /* exclusive */, false /* preAdd */, true /* short */); } - + @Test public void test05NormalPre_4Win() throws InterruptedException { final GLProfile glp = GLProfile.getGL2ES2(); final GLCapabilities caps = new GLCapabilities( glp ); runTestGL(caps, 4 /* numWin */, false /* exclusive */, true /* preAdd */, false /* short */); } - + @Test public void test06NormalPost_4Win() throws InterruptedException { final GLProfile glp = GLProfile.getGL2ES2(); final GLCapabilities caps = new GLCapabilities( glp ); runTestGL(caps, 4 /* numWin */, false /* exclusive */, false /* preAdd */, true /* short */); } - + @Test public void test07ExclPre_4Win() throws InterruptedException { final GLProfile glp = GLProfile.getGL2ES2(); final GLCapabilities caps = new GLCapabilities( glp ); runTestGL(caps, 4 /* numWin */, true /* exclusive */, true /* preAdd */, false /* short */); } - + @Test public void test08ExclPost_4Win() throws InterruptedException { final GLProfile glp = GLProfile.getGL2ES2(); final GLCapabilities caps = new GLCapabilities( glp ); runTestGL(caps, 4 /* numWin */, true /* exclusive */, false /* preAdd */, true /* short */); } - + } diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/acore/ect/ExclusiveContextBase10.java b/src/test/com/jogamp/opengl/test/junit/jogl/acore/ect/ExclusiveContextBase10.java index 516622796..b6d4c4e6b 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/acore/ect/ExclusiveContextBase10.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/acore/ect/ExclusiveContextBase10.java @@ -3,14 +3,14 @@ * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. Redistributions 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. - * + * * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR @@ -20,12 +20,12 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. */ - + package com.jogamp.opengl.test.junit.jogl.acore.ect; import com.jogamp.newt.NewtFactory; @@ -54,43 +54,44 @@ import org.junit.Test; import org.junit.runners.MethodSorters; /** - * ExclusiveContextThread base implementation to test performance impact of the ExclusiveContext feature with AnimatorBase. + * ExclusiveContextThread base implementation to test performance impact of the ExclusiveContext feature with AnimatorBase. */ @FixMethodOrder(MethodSorters.NAME_ASCENDING) public abstract class ExclusiveContextBase10 extends UITestCase { static boolean testExclusiveWithAWT = false; static long duration = 1400; - + static boolean showFPS = true; static int showFPSRate = 60; - - static final int demoSize = 128; - + + static final int demoWinSize = 128; + static InsetsImmutable insets = null; - static int scrnHeight, scrnWidth; static int num_x, num_y; - + static int swapInterval = 0; - + @BeforeClass public static void initClass00() { Window dummyWindow = NewtFactory.createWindow(new Capabilities()); - dummyWindow.setSize(demoSize, demoSize); + dummyWindow.setSize(demoWinSize, demoWinSize); dummyWindow.setVisible(true); Assert.assertEquals(true, dummyWindow.isVisible()); Assert.assertEquals(true, dummyWindow.isNativeValid()); - insets = dummyWindow.getInsets(); - scrnHeight = dummyWindow.getScreen().getHeight(); - scrnWidth = dummyWindow.getScreen().getWidth(); - num_x = scrnWidth / ( demoSize + insets.getTotalWidth() ) - 2; - num_y = scrnHeight / ( demoSize + insets.getTotalHeight() ) - 2; + insets = dummyWindow.getInsets(); + final int scrnHeight = dummyWindow.getScreen().getHeight(); + final int scrnWidth = dummyWindow.getScreen().getWidth(); + final int[] demoScreenSize = dummyWindow.convertToPixelUnits(new int[] { demoWinSize, demoWinSize }); + final int[] insetsScreenSize = dummyWindow.convertToPixelUnits(new int[] { insets.getTotalWidth(), insets.getTotalHeight() }); + num_x = scrnWidth / ( demoScreenSize[0] + insetsScreenSize[0] ) - 2; + num_y = scrnHeight / ( demoScreenSize[1] + insetsScreenSize[1] ) - 2; dummyWindow.destroy(); } @AfterClass public static void releaseClass00() { } - + protected abstract boolean isAWTTestCase(); protected abstract Thread getAWTRenderThread(); protected abstract AnimatorBase createAnimator(); @@ -119,16 +120,16 @@ public abstract class ExclusiveContextBase10 extends UITestCase { } final GLAutoDrawable[] drawables = new GLAutoDrawable[drawableCount]; for(int i=0; i<drawableCount; i++) { - final int x = ( i % num_x ) * ( demoSize + insets.getTotalHeight() ) + insets.getLeftWidth(); - final int y = ( (i / num_x) % num_y ) * ( demoSize + insets.getTotalHeight() ) + insets.getTopHeight(); - - drawables[i] = createGLAutoDrawable("Win #"+i, x, y, demoSize, demoSize, caps); + final int x = ( i % num_x ) * ( demoWinSize + insets.getTotalHeight() ) + insets.getLeftWidth(); + final int y = ( (i / num_x) % num_y ) * ( demoWinSize + insets.getTotalHeight() ) + insets.getTopHeight(); + + drawables[i] = createGLAutoDrawable("Win #"+i, x, y, demoWinSize, demoWinSize, caps); Assert.assertNotNull(drawables[i]); final GearsES2 demo = new GearsES2(swapInterval); demo.setVerbose(false); drawables[i].addGLEventListener(demo); } - + for(int i=0; i<drawableCount; i++) { animator.add(drawables[i]); } @@ -141,14 +142,14 @@ public abstract class ExclusiveContextBase10 extends UITestCase { } Assert.assertFalse(animator.isAnimating()); Assert.assertFalse(animator.isStarted()); - + // Animator Start Assert.assertTrue(animator.start()); - + Assert.assertTrue(animator.isStarted()); Assert.assertTrue(animator.isAnimating()); Assert.assertEquals(exclusive, animator.isExclusiveContextEnabled()); - + // After start, ExclusiveContextThread is set { final Thread ect = animator.getExclusiveContextThread(); @@ -160,32 +161,32 @@ public abstract class ExclusiveContextBase10 extends UITestCase { } } else { Assert.assertEquals(null, ect); - } + } for(int i=0; i<drawableCount; i++) { Assert.assertEquals(ect, drawables[i].getExclusiveContextThread()); } setGLAutoDrawableVisible(drawables); } animator.setUpdateFPSFrames(showFPSRate, showFPS ? System.err : null); - + // Normal run .. Thread.sleep(duration); - + // Animator Stop #2 - Assert.assertTrue(animator.stop()); + Assert.assertTrue(animator.stop()); Assert.assertFalse(animator.isAnimating()); Assert.assertFalse(animator.isStarted()); - Assert.assertFalse(animator.isPaused()); + Assert.assertFalse(animator.isPaused()); Assert.assertEquals(exclusive, animator.isExclusiveContextEnabled()); Assert.assertEquals(null, animator.getExclusiveContextThread()); - + // Destroy GLWindows for(int i=0; i<drawableCount; i++) { destroyGLAutoDrawableVisible(drawables[i]); Assert.assertEquals(true, AWTRobotUtil.waitForRealized(drawables[i], false)); - } - } - + } + } + @Test public void test01Normal_1Win() throws InterruptedException { final GLProfile glp = GLProfile.getGL2ES2(); @@ -199,18 +200,18 @@ public abstract class ExclusiveContextBase10 extends UITestCase { final GLCapabilities caps = new GLCapabilities( glp ); runTestGL(caps, 1 /* numWin */, true /* exclusive */); } - + @Test public void test05Normal_4Win() throws InterruptedException { final GLProfile glp = GLProfile.getGL2ES2(); final GLCapabilities caps = new GLCapabilities( glp ); runTestGL(caps, 4 /* numWin */, false /* exclusive */); } - + @Test public void test07Excl_4Win() throws InterruptedException { final GLProfile glp = GLProfile.getGL2ES2(); final GLCapabilities caps = new GLCapabilities( glp ); runTestGL(caps, 4 /* numWin */, true /* exclusive */); - } + } } diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/newt/TestSwingAWTRobotUsageBeforeJOGLInitBug411.java b/src/test/com/jogamp/opengl/test/junit/jogl/newt/TestSwingAWTRobotUsageBeforeJOGLInitBug411.java index 2f5fb2606..22154ab58 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/newt/TestSwingAWTRobotUsageBeforeJOGLInitBug411.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/newt/TestSwingAWTRobotUsageBeforeJOGLInitBug411.java @@ -3,14 +3,14 @@ * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. Redistributions 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. - * + * * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR @@ -20,27 +20,27 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. */ - + package com.jogamp.opengl.test.junit.jogl.newt; import com.jogamp.opengl.test.junit.jogl.demos.es2.GearsES2; - import com.jogamp.opengl.test.junit.util.*; import java.lang.reflect.InvocationTargetException; import javax.media.nativewindow.NativeWindowFactory; +import javax.media.nativewindow.util.Rectangle; import javax.media.opengl.GLAutoDrawable; 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.opengl.util.Animator; import com.jogamp.newt.Screen; import com.jogamp.newt.opengl.GLWindow; import com.jogamp.newt.awt.NewtCanvasAWT; @@ -57,6 +57,7 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; + import javax.media.opengl.GLEventListener; import javax.swing.JButton; import javax.swing.JFrame; @@ -158,7 +159,7 @@ public class TestSwingAWTRobotUsageBeforeJOGLInitBug411 extends UITestCase { colorPanel.setBackground(Color.white); colorPanel.repaint(); }}); - + robot = new Robot(); robot.setAutoWaitForIdle(true); @@ -167,12 +168,12 @@ public class TestSwingAWTRobotUsageBeforeJOGLInitBug411 extends UITestCase { Thread.sleep(AWTRobotUtil.TIME_SLICE); } Assert.assertEquals(true, frame.isVisible()); - + System.err.println("TestSwingAWTRobotUsageBeforeJOGLInitBug411.setup(): Before NativeWindow init"); - + NativeWindowFactory.initSingleton(); - - AWTRobotUtil.clearAWTFocus(robot); + + AWTRobotUtil.clearAWTFocus(robot); AWTRobotUtil.toFrontAndRequestFocus(robot, frame); AWTRobotUtil.requestFocus(robot, button); @@ -198,7 +199,7 @@ public class TestSwingAWTRobotUsageBeforeJOGLInitBug411 extends UITestCase { System.err.println("TestSwingAWTRobotUsageBeforeJOGLInitBug411.release(): End"); } - protected void runTestGL(final Canvas canvas, GLAutoDrawable drawable) + protected void runTestGL(final Canvas canvas, GLAutoDrawable drawable) throws AWTException, InterruptedException, InvocationTargetException { Dimension size = new Dimension(400,400); @@ -268,9 +269,10 @@ public class TestSwingAWTRobotUsageBeforeJOGLInitBug411 extends UITestCase { win0.setSize(100,100); win0.setVisible(true); Assert.assertEquals(true, AWTRobotUtil.waitForRealized(win0, true)); - + Screen screen = win0.getScreen(); - win0.setPosition(screen.getWidth()-150, 0); + final Rectangle screenBoundsInWinU = screen.getViewportInWindowUnits(win0); + win0.setPosition(screenBoundsInWinU.getX()-150, 0); win0.addGLEventListener(new GearsES2()); Animator anim = new Animator(win0); anim.start(); @@ -282,14 +284,14 @@ public class TestSwingAWTRobotUsageBeforeJOGLInitBug411 extends UITestCase { win0.destroy(); Assert.assertEquals(true, AWTRobotUtil.waitForRealized(win0, false)); - Assert.assertEquals(false, win0.isNativeValid()); + Assert.assertEquals(false, win0.isNativeValid()); Assert.assertEquals(true, anim.isAnimating()); // due to newtCanvasAWT/win1 newtCanvasAWT.destroy(); // destroys both newtCanvasAWT/win1 Assert.assertEquals(false, win1.isNativeValid()); Assert.assertEquals(false, win0.isNativeValid()); Assert.assertEquals(true, anim.isAnimating()); - + Assert.assertEquals(true, anim.stop()); Assert.assertEquals(false, anim.isAnimating()); @@ -321,10 +323,10 @@ public class TestSwingAWTRobotUsageBeforeJOGLInitBug411 extends UITestCase { GLCanvas glCanvas = new GLCanvas(caps); anim.add(glCanvas); runTestGL(glCanvas, glCanvas); - + anim.remove(glCanvas); Assert.assertEquals(false, anim.isAnimating()); - + /** win0.destroy(); Assert.assertEquals(true, anim.isAnimating()); diff --git a/src/test/com/jogamp/opengl/test/junit/newt/TestDisplayLifecycle02NEWT.java b/src/test/com/jogamp/opengl/test/junit/newt/TestDisplayLifecycle02NEWT.java index 87cb6f05b..8c679d209 100644 --- a/src/test/com/jogamp/opengl/test/junit/newt/TestDisplayLifecycle02NEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/newt/TestDisplayLifecycle02NEWT.java @@ -3,14 +3,14 @@ * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. Redistributions 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. - * + * * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR @@ -20,7 +20,7 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. @@ -34,11 +34,13 @@ import org.junit.Test; import org.junit.FixMethodOrder; import org.junit.runners.MethodSorters; +import javax.media.nativewindow.util.Rectangle; import javax.media.opengl.*; import com.jogamp.newt.*; import com.jogamp.newt.event.*; import com.jogamp.newt.opengl.*; + import java.io.IOException; import com.jogamp.opengl.test.junit.util.AWTRobotUtil; @@ -68,7 +70,7 @@ public class TestDisplayLifecycle02NEWT extends UITestCase { // // Create native windowing resources .. X11/Win/OSX - // + // GLWindow glWindow = GLWindow.create(caps); glWindow.setUpdateFPSFrames(1, null); @@ -147,7 +149,7 @@ public class TestDisplayLifecycle02NEWT extends UITestCase { window.destroy(); Assert.assertTrue(AWTRobotUtil.waitForRealized(window, false)); Assert.assertTrue(AWTRobotUtil.waitForRealized(screen, false)); - + Assert.assertEquals(screen,window.getScreen()); Assert.assertEquals(0,Display.getActiveDisplayNumber()); Assert.assertEquals(0,display.getReferenceCount()); @@ -195,7 +197,7 @@ public class TestDisplayLifecycle02NEWT extends UITestCase { window.destroy(); Assert.assertTrue(AWTRobotUtil.waitForRealized(window, false)); Assert.assertTrue(AWTRobotUtil.waitForRealized(screen, false)); - + Assert.assertEquals(screen,window.getScreen()); Assert.assertEquals(false,window.isNativeValid()); Assert.assertEquals(false,window.isVisible()); @@ -239,7 +241,8 @@ public class TestDisplayLifecycle02NEWT extends UITestCase { GLWindow window2 = createWindow(caps, width, height); Assert.assertSame(screen, window2.getScreen()); Assert.assertSame(display, window2.getScreen().getDisplay()); - window2.setPosition(screen.getWidth()-width, 0); + final Rectangle screenBoundsInWinU = screen.getViewportInWindowUnits(window2); + window2.setPosition(screenBoundsInWinU.getWidth()-width, 0); Assert.assertEquals(0,Display.getActiveDisplayNumber()); Assert.assertEquals(0,display.getReferenceCount()); @@ -298,7 +301,7 @@ public class TestDisplayLifecycle02NEWT extends UITestCase { // destruction ... window1.destroy(); Assert.assertTrue(AWTRobotUtil.waitForRealized(window1, false)); - + Assert.assertNotNull(window1.getScreen()); Assert.assertEquals(false,window1.isNativeValid()); Assert.assertEquals(false,window1.isVisible()); @@ -316,7 +319,7 @@ public class TestDisplayLifecycle02NEWT extends UITestCase { window2.destroy(); Assert.assertTrue(AWTRobotUtil.waitForRealized(window2, false)); Assert.assertTrue(AWTRobotUtil.waitForRealized(screen, false)); - + Assert.assertNotNull(window2.getScreen()); Assert.assertEquals(false,window2.isNativeValid()); Assert.assertEquals(false,window2.isVisible()); @@ -331,12 +334,12 @@ public class TestDisplayLifecycle02NEWT extends UITestCase { Assert.assertEquals(0,screen.getReferenceCount()); Assert.assertEquals(false,screen.isNativeValid()); - // invalidate (again) .. + // invalidate (again) .. window1.destroy(); Assert.assertEquals(false,window1.isNativeValid()); Assert.assertEquals(false,window1.isVisible()); - // invalidate (again) .. + // invalidate (again) .. window2.destroy(); Assert.assertEquals(false,window2.isNativeValid()); Assert.assertEquals(false,window2.isVisible()); diff --git a/src/test/com/jogamp/opengl/test/junit/newt/TestGLWindows02NEWTAnimated.java b/src/test/com/jogamp/opengl/test/junit/newt/TestGLWindows02NEWTAnimated.java index 86cb53319..6bad27384 100644 --- a/src/test/com/jogamp/opengl/test/junit/newt/TestGLWindows02NEWTAnimated.java +++ b/src/test/com/jogamp/opengl/test/junit/newt/TestGLWindows02NEWTAnimated.java @@ -3,14 +3,14 @@ * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. Redistributions 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. - * + * * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR @@ -20,12 +20,12 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. */ - + package com.jogamp.opengl.test.junit.newt; @@ -35,12 +35,14 @@ import org.junit.Test; import org.junit.FixMethodOrder; import org.junit.runners.MethodSorters; +import javax.media.nativewindow.util.Rectangle; import javax.media.opengl.*; import com.jogamp.opengl.util.Animator; import com.jogamp.newt.*; import com.jogamp.newt.event.*; import com.jogamp.newt.opengl.*; + import java.io.IOException; import com.jogamp.opengl.test.junit.util.UITestCase; @@ -67,7 +69,7 @@ public class TestGLWindows02NEWTAnimated extends UITestCase { // // Create native windowing resources .. X11/Win/OSX - // + // GLWindow glWindow; if(null!=screen) { Window window = NewtFactory.createWindow(screen, caps); @@ -76,7 +78,7 @@ public class TestGLWindows02NEWTAnimated extends UITestCase { } else { glWindow = GLWindow.create(caps); } - glWindow.setUpdateFPSFrames(1, null); + glWindow.setUpdateFPSFrames(1, null); Assert.assertNotNull(glWindow); glWindow.setUndecorated(onscreen && undecorated); @@ -96,9 +98,9 @@ public class TestGLWindows02NEWTAnimated extends UITestCase { // System.out.println("Created: "+glWindow); // - // Create native OpenGL resources .. XGL/WGL/CGL .. + // Create native OpenGL resources .. XGL/WGL/CGL .. // equivalent to GLAutoDrawable methods: setVisible(true) - // + // GLCapabilitiesImmutable caps2 = glWindow.getChosenGLCapabilities(); Assert.assertNotNull(caps2); Assert.assertTrue(caps2.getGreenBits()>=5); @@ -121,18 +123,18 @@ public class TestGLWindows02NEWTAnimated extends UITestCase { Assert.assertNotNull(caps); GLWindow window = createWindow(null, caps, width, height, true /* onscreen */, false /* undecorated */, true /* vsync */); Animator animator = new Animator(window); - animator.setUpdateFPSFrames(1, null); + animator.setUpdateFPSFrames(1, null); Assert.assertTrue(animator.start()); while(animator.isAnimating() && animator.getTotalFPSDuration()<durationPerTest) { Thread.sleep(100); } - destroyWindow(window); // destroy - but still in animator + destroyWindow(window); // destroy - but still in animator Assert.assertEquals(false, window.isNativeValid()); - Assert.assertEquals(false, window.isVisible()); + Assert.assertEquals(false, window.isVisible()); Assert.assertEquals(true, animator.isAnimating()); Assert.assertEquals(false, animator.isPaused()); Assert.assertEquals(true, animator.isStarted()); - + animator.remove(window); Thread.sleep(250); // give animator a chance to become paused Assert.assertEquals(false, animator.isAnimating()); @@ -147,7 +149,7 @@ public class TestGLWindows02NEWTAnimated extends UITestCase { Assert.assertNotNull(caps); GLWindow window = createWindow(null, caps, width, height, true /* onscreen */, false /* undecorated */, true /* vsync */); Animator animator = new Animator(); - animator.setUpdateFPSFrames(1, null); + animator.setUpdateFPSFrames(1, null); Assert.assertTrue(animator.start()); Thread.sleep(250); // give animator a chance to become paused Assert.assertEquals(false, animator.isAnimating()); // zero drawables @@ -185,10 +187,11 @@ public class TestGLWindows02NEWTAnimated extends UITestCase { GLWindow window2 = createWindow(screen, caps, width-10, height-10, true /* onscreen */, false /* undecorated */, true /* vsync */); Assert.assertNotNull(window2); - window2.setPosition(screen.getWidth()-width, 0); + final Rectangle screenBoundsInWinU = screen.getViewportInWindowUnits(window2); + window2.setPosition(screenBoundsInWinU.getWidth()-width, 0); Animator animator = new Animator(); - animator.setUpdateFPSFrames(1, null); + animator.setUpdateFPSFrames(1, null); Assert.assertEquals(false, animator.isStarted()); Assert.assertEquals(false, animator.isAnimating()); // zero drawables Assert.assertEquals(false, animator.isPaused()); // zero drawables, but not started @@ -251,10 +254,11 @@ public class TestGLWindows02NEWTAnimated extends UITestCase { Assert.assertNotNull(screen2); GLWindow window2 = createWindow(screen2, caps, width-10, height-10, true /* onscreen */, false /* undecorated */, true /* vsync */); Assert.assertNotNull(window2); - window2.setPosition(screen2.getWidth()-width, 0); + final Rectangle screen2BoundsInWinU = screen2.getViewportInWindowUnits(window2); + window2.setPosition(screen2BoundsInWinU.getWidth()-width, 0); Animator animator = new Animator(); - animator.setUpdateFPSFrames(1, null); + animator.setUpdateFPSFrames(1, null); Assert.assertEquals(false, animator.isStarted()); Assert.assertEquals(false, animator.isAnimating()); Assert.assertEquals(false, animator.isPaused()); @@ -287,23 +291,23 @@ public class TestGLWindows02NEWTAnimated extends UITestCase { while(animator.isAnimating() && animator.getTotalFPSDuration()<durationPerTest+durationPerTest/10) { Thread.sleep(100); } - - Assert.assertEquals(true, animator.isStarted()); + + Assert.assertEquals(true, animator.isStarted()); Assert.assertEquals(true, animator.isAnimating()); Assert.assertEquals(false, animator.isPaused()); - + Assert.assertEquals(true, animator.pause()); - - Assert.assertEquals(true, animator.isStarted()); + + Assert.assertEquals(true, animator.isStarted()); Assert.assertEquals(false, animator.isAnimating()); Assert.assertEquals(true, animator.isPaused()); Assert.assertEquals(true, animator.resume()); - + Assert.assertEquals(true, animator.isStarted()); Assert.assertEquals(true, animator.isAnimating()); Assert.assertEquals(false, animator.isPaused()); - + destroyWindow(window2); animator.remove(window2); Assert.assertEquals(true, animator.isStarted()); diff --git a/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode01bNEWT.java b/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode01bNEWT.java index 871012a28..ac5e7e53c 100644 --- a/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode01bNEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode01bNEWT.java @@ -3,14 +3,14 @@ * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. Redistributions 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. - * + * * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR @@ -20,15 +20,16 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. */ - + package com.jogamp.opengl.test.junit.newt.mm; import java.io.IOException; + import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLProfile; @@ -54,7 +55,9 @@ import com.jogamp.opengl.test.junit.util.UITestCase; import com.jogamp.opengl.util.Animator; import java.util.List; + import javax.media.nativewindow.util.Dimension; +import javax.media.nativewindow.util.Rectangle; import javax.media.nativewindow.util.RectangleImmutable; /** @@ -64,7 +67,7 @@ import javax.media.nativewindow.util.RectangleImmutable; public class TestScreenMode01bNEWT extends UITestCase { static GLProfile glp; static int width, height; - + static long waitTimeShort = 2000; static long duration = 6000; @@ -80,14 +83,15 @@ public class TestScreenMode01bNEWT extends UITestCase { public static void releaseClass() throws InterruptedException { Thread.sleep(waitTimeShort); } - - static GLWindow createWindow(Screen screen, GLCapabilities caps, String name, int x, int y, int width, int height) throws InterruptedException { + + static GLWindow createWindow(Screen screen, GLCapabilities caps, String name, int screenXPos, int screenYPos, int width, int height) throws InterruptedException { Assert.assertNotNull(caps); GLWindow window = GLWindow.create(screen, caps); // Window window = NewtFactory.createWindow(screen, caps); + final int[] winPos = window.convertToWindowUnits(new int[] { screenXPos, screenYPos }); window.setTitle(name); - window.setPosition(x, y); + window.setPosition(winPos[0], winPos[1]); window.setSize(width, height); window.addGLEventListener(new GearsES2()); Assert.assertNotNull(window); @@ -100,10 +104,10 @@ public class TestScreenMode01bNEWT extends UITestCase { static void destroyWindow(Window window) throws InterruptedException { if(null!=window) { window.destroy(); - Assert.assertTrue(AWTRobotUtil.waitForRealized(window, false)); + Assert.assertTrue(AWTRobotUtil.waitForRealized(window, false)); } } - + @Test public void testScreenModeChangeSingleQ1() throws InterruptedException { final Display display = NewtFactory.createDisplay(null); // local display @@ -119,7 +123,7 @@ public class TestScreenMode01bNEWT extends UITestCase { Assert.assertTrue(AWTRobotUtil.waitForRealized(screen, false)); } } - + @Test public void testScreenModeChangeSingleQ2() throws InterruptedException { final Display display = NewtFactory.createDisplay(null); // local display @@ -139,24 +143,26 @@ public class TestScreenMode01bNEWT extends UITestCase { Assert.assertTrue(AWTRobotUtil.waitForRealized(screen, false)); } } - - void testScreenModeChangeImpl(final Screen screen, int xpos, int ypos) throws InterruptedException { + + void testScreenModeChangeImpl(final Screen screen, int screenXPos, int screenYPos) throws InterruptedException { Thread.sleep(waitTimeShort); final GLCapabilities caps = new GLCapabilities(glp); Assert.assertNotNull(caps); final Display display = screen.getDisplay(); System.err.println("Test.0: Window screen: "+screen); - - System.err.println("Test.0: Window bounds (pre): "+xpos+"/"+ypos+" "+width+"x"+height+" within "+screen.getViewport()); - - GLWindow window0 = createWindow(screen, caps, "win0", xpos, ypos, width, height); - Assert.assertNotNull(window0); - System.err.println("Test.0: Window bounds: "+window0.getX()+"/"+window0.getY()+" "+window0.getSurfaceWidth()+"x"+window0.getSurfaceHeight()+" within "+screen.getViewport()); + + System.err.println("Test.0: Window bounds (pre): screenPos "+screenXPos+"/"+screenYPos+" [pixels], windowSize "+width+"x"+height+" [wu] within "+screen.getViewport()+" [pixels]"); + + GLWindow window0 = createWindow(screen, caps, "win0", screenXPos, screenYPos, width, height); + Assert.assertNotNull(window0); + Rectangle window0ScreenRect = window0.getSurfaceBounds(); + System.err.println("Test.0: Window bounds: "+window0.getX()+"/"+window0.getY()+" "+window0.getWindowWidth()+"x"+window0.getWindowHeight()+" [wu] within "+screen.getViewportInWindowUnits(window0)+" [wu]"); + System.err.println("Test.0: Window screenRect: "+window0ScreenRect+" [pixels]"); final Animator anim = new Animator(window0); anim.start(); - + List<MonitorMode> allMonitorModes = screen.getMonitorModes(); Assert.assertTrue(allMonitorModes.size()>0); if(allMonitorModes.size()==1) { @@ -168,7 +174,7 @@ public class TestScreenMode01bNEWT extends UITestCase { MonitorDevice monitor = window0.getMainMonitor(); System.err.println("Test.0: Window monitor: "+monitor); - + List<MonitorMode> monitorModes = monitor.getSupportedModes(); Assert.assertTrue(monitorModes.size()>0); if(monitorModes.size()==1) { @@ -178,7 +184,7 @@ public class TestScreenMode01bNEWT extends UITestCase { return; } Assert.assertTrue(allMonitorModes.containsAll(monitorModes)); - + MonitorMode mmCurrent = monitor.getCurrentMode(); Assert.assertNotNull(mmCurrent); MonitorMode mmOrig = monitor.getOriginalMode(); @@ -199,7 +205,7 @@ public class TestScreenMode01bNEWT extends UITestCase { monitorModes = MonitorModeUtil.filterByRate(monitorModes, mmOrig.getRefreshRate()); Assert.assertNotNull(monitorModes); Assert.assertTrue(monitorModes.size()>0); - + monitorModes = MonitorModeUtil.getHighestAvailableBpp(monitorModes); Assert.assertNotNull(monitorModes); Assert.assertTrue(monitorModes.size()>0); @@ -218,10 +224,14 @@ public class TestScreenMode01bNEWT extends UITestCase { Assert.assertTrue(smOk); } - System.err.println("Test.1: Window screen: "+screen); - System.err.println("Test.1: Window bounds: "+window0.getX()+"/"+window0.getY()+" "+window0.getSurfaceWidth()+"x"+window0.getSurfaceHeight()+" within "+screen.getViewport()); - System.err.println("Test.1: Window monitor: "+window0.getMainMonitor()); - + window0ScreenRect = window0.getSurfaceBounds(); + System.err.println("Test.1: Screen : "+screen); + System.err.println("Test.1: Window bounds : "+window0.getX()+"/"+window0.getY()+" "+window0.getWindowWidth()+"x"+window0.getWindowHeight()+" [wu] within "+screen.getViewportInWindowUnits(window0)+" [wu]"); + System.err.println("Test.1: Window screenRect: "+window0ScreenRect+" [pixels]"); + System.err.println("Test.1: Screen viewport : "+screen.getViewport()+" [pixels]"); + System.err.println("Test.1: Window monitor : "+monitor.getViewport()+" [pixels]"); + System.err.println("Test.1: Window main-mon : "+window0.getMainMonitor()); + Thread.sleep(duration); Assert.assertEquals(true,display.isNativeValid()); @@ -238,12 +248,15 @@ public class TestScreenMode01bNEWT extends UITestCase { Assert.assertFalse(monitor.isModeChangedByUs()); Assert.assertEquals(mmOrig, mmCurrent); Assert.assertTrue(smOk); - } - - System.err.println("Test.2: Window screen: "+screen); - System.err.println("Test.2: Window bounds: "+window0.getX()+"/"+window0.getY()+" "+window0.getSurfaceWidth()+"x"+window0.getSurfaceHeight()+" within "+screen.getViewport()); - System.err.println("Test.2: Window monitor: "+window0.getMainMonitor()); - + } + + System.err.println("Test.2: Screen : "+screen); + System.err.println("Test.2: Window bounds : "+window0.getX()+"/"+window0.getY()+" "+window0.getWindowWidth()+"x"+window0.getWindowHeight()+" [wu] within "+screen.getViewportInWindowUnits(window0)+" [wu]"); + System.err.println("Test.2: Window screenRect: "+window0ScreenRect+" [pixels]"); + System.err.println("Test.2: Screen viewport : "+screen.getViewport()+" [pixels]"); + System.err.println("Test.2: Window monitor : "+monitor.getViewport()+" [pixels]"); + System.err.println("Test.2: Window main-mon : "+window0.getMainMonitor()); + Thread.sleep(duration); anim.stop(); destroyWindow(window0); diff --git a/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode01cNEWT.java b/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode01cNEWT.java index b4257e070..b48d582ed 100644 --- a/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode01cNEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode01cNEWT.java @@ -3,14 +3,14 @@ * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. Redistributions 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. - * + * * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR @@ -20,15 +20,16 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. */ - + package com.jogamp.opengl.test.junit.newt.mm; import java.io.IOException; + import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLProfile; @@ -54,6 +55,7 @@ import com.jogamp.opengl.util.Animator; import java.util.ArrayList; import java.util.List; + import javax.media.nativewindow.util.Rectangle; import javax.media.nativewindow.util.RectangleImmutable; @@ -64,7 +66,7 @@ import javax.media.nativewindow.util.RectangleImmutable; public class TestScreenMode01cNEWT extends UITestCase { static GLProfile glp; static int width, height; - + static long waitTimeShort = 2000; static long duration = 4000; @@ -80,14 +82,15 @@ public class TestScreenMode01cNEWT extends UITestCase { public static void releaseClass() throws InterruptedException { Thread.sleep(waitTimeShort); } - - static GLWindow createWindow(Screen screen, GLCapabilities caps, String name, int x, int y, int width, int height) throws InterruptedException { + + static GLWindow createWindow(Screen screen, GLCapabilities caps, String name, int screenXPos, int screenYPos, int width, int height) throws InterruptedException { Assert.assertNotNull(caps); GLWindow window = GLWindow.create(screen, caps); // Window window = NewtFactory.createWindow(screen, caps); + final int[] winPos = window.convertToWindowUnits(new int[] { screenXPos, screenYPos }); window.setTitle(name); - window.setPosition(x, y); + window.setPosition(winPos[0], winPos[1]); window.setSize(width, height); window.addGLEventListener(new GearsES2()); Assert.assertNotNull(window); @@ -100,10 +103,10 @@ public class TestScreenMode01cNEWT extends UITestCase { static void destroyWindow(Window window) throws InterruptedException { if(null!=window) { window.destroy(); - Assert.assertTrue(AWTRobotUtil.waitForRealized(window, false)); + Assert.assertTrue(AWTRobotUtil.waitForRealized(window, false)); } } - + @Test public void testScreenFullscreenSingleQ1() throws InterruptedException { final Display display = NewtFactory.createDisplay(null); // local display @@ -116,17 +119,17 @@ public class TestScreenMode01cNEWT extends UITestCase { testScreenFullscreenImpl(screen, monitorVp.getX(), monitorVp.getY(), false, null); } finally { screen.removeReference(); - Assert.assertTrue(AWTRobotUtil.waitForRealized(screen, false)); + Assert.assertTrue(AWTRobotUtil.waitForRealized(screen, false)); } } - + @Test public void testScreenFullscreenSingleQ2() throws InterruptedException { final Display display = NewtFactory.createDisplay(null); // local display Assert.assertNotNull(display); final Screen screen = NewtFactory.createScreen(display, 0); // screen 0 Assert.assertNotNull(screen); - screen.addReference(); // trigger creation + screen.addReference(); // trigger creation try { if( 2 > screen.getMonitorDevices().size() ) { System.err.println("Test Disabled (1): Monitor count < 2: "+screen); @@ -136,23 +139,23 @@ public class TestScreenMode01cNEWT extends UITestCase { testScreenFullscreenImpl(screen, monitorVp.getX(), monitorVp.getY(), false, null); } finally { screen.removeReference(); - Assert.assertTrue(AWTRobotUtil.waitForRealized(screen, false)); + Assert.assertTrue(AWTRobotUtil.waitForRealized(screen, false)); } } - + @Test public void testScreenFullscreenSpanQ1Q2() throws InterruptedException { final Display display = NewtFactory.createDisplay(null); // local display Assert.assertNotNull(display); final Screen screen = NewtFactory.createScreen(display, 0); // screen 0 Assert.assertNotNull(screen); - screen.addReference(); // trigger creation + screen.addReference(); // trigger creation try { final int crtCount = screen.getMonitorDevices().size(); if( 2 >= crtCount ) { System.err.println("Test Disabled (2): Spanning monitor count "+2+" >= screen monitor count: "+screen); - return; - } + return; + } final ArrayList<MonitorDevice> monitors = new ArrayList<MonitorDevice>(); monitors.add(screen.getMonitorDevices().get(0)); // Q1 monitors.add(screen.getMonitorDevices().get(1)); // Q2 @@ -160,17 +163,17 @@ public class TestScreenMode01cNEWT extends UITestCase { testScreenFullscreenImpl(screen, monitorVp.getX()+50, monitorVp.getY()+50, true, monitors); } finally { screen.removeReference(); - Assert.assertTrue(AWTRobotUtil.waitForRealized(screen, false)); + Assert.assertTrue(AWTRobotUtil.waitForRealized(screen, false)); } } - + @Test public void testScreenFullscreenSpanALL() throws InterruptedException { final Display display = NewtFactory.createDisplay(null); // local display Assert.assertNotNull(display); final Screen screen = NewtFactory.createScreen(display, 0); // screen 0 Assert.assertNotNull(screen); - screen.addReference(); // trigger creation + screen.addReference(); // trigger creation try { if( 2 > screen.getMonitorDevices().size() ) { System.err.println("Test Disabled (3): Monitor count < 2: "+screen); @@ -180,28 +183,32 @@ public class TestScreenMode01cNEWT extends UITestCase { testScreenFullscreenImpl(screen, monitorVp.getX()-50, monitorVp.getY()+50, true, null); } finally { screen.removeReference(); - Assert.assertTrue(AWTRobotUtil.waitForRealized(screen, false)); + Assert.assertTrue(AWTRobotUtil.waitForRealized(screen, false)); } } - - void testScreenFullscreenImpl(final Screen screen, int xpos, int ypos, boolean spanAcrossMonitors, List<MonitorDevice> monitors) throws InterruptedException { + + void testScreenFullscreenImpl(final Screen screen, final int screenXPos, final int screenYPos, + final boolean spanAcrossMonitors, final List<MonitorDevice> monitors) throws InterruptedException { Thread.sleep(waitTimeShort); final GLCapabilities caps = new GLCapabilities(glp); Assert.assertNotNull(caps); final Display display = screen.getDisplay(); - + System.err.println("Test.0: Window screen: "+screen); - - System.err.println("Test.0: Window bounds (pre): "+xpos+"/"+ypos+" "+width+"x"+height+" within "+screen.getViewport()); - - GLWindow window0 = createWindow(screen, caps, "win0", xpos, ypos, width, height); - Assert.assertNotNull(window0); - System.err.println("Test.0: Window bounds: "+window0.getX()+"/"+window0.getY()+" "+window0.getSurfaceWidth()+"x"+window0.getSurfaceHeight()+" within "+screen.getViewport()); + + System.err.println("Test.0: Window bounds (pre): screenPos "+screenXPos+"/"+screenYPos+" [pixels], windowSize "+width+"x"+height+" [wu] within "+screen.getViewport()+" [pixels]"); + + GLWindow window0 = createWindow(screen, caps, "win0", screenXPos, screenYPos, width, height); + Assert.assertNotNull(window0); + Rectangle window0ScreenRect = window0.getSurfaceBounds(); + System.err.println("Test.0: Window bounds : "+window0.getX()+"/"+window0.getY()+" "+window0.getWindowWidth()+"x"+window0.getWindowHeight()+" [wu] within "+screen.getViewportInWindowUnits(window0)+" [wu]"); + System.err.println("Test.0: Window screenRect: "+window0ScreenRect+" [pixels]"); + System.err.println("Test.0: Screen viewport : "+screen.getViewport()+" [pixels]"); final Animator anim = new Animator(window0); anim.start(); - + List<MonitorMode> allMonitorModes = screen.getMonitorModes(); Assert.assertTrue(allMonitorModes.size()>0); @@ -214,29 +221,33 @@ public class TestScreenMode01cNEWT extends UITestCase { } monitor = window0.getMainMonitor(); - System.err.println("Test.1: Window bounds: "+window0.getX()+"/"+window0.getY()+" "+window0.getSurfaceWidth()+"x"+window0.getSurfaceHeight()+" within "+screen.getViewport()); - System.err.println("Test.1: Window monitor: "+monitor.getViewport()); - Rectangle window0Rect = new Rectangle(window0.getX(), window0.getY(), window0.getSurfaceWidth(), window0.getSurfaceHeight()); + window0ScreenRect = window0.getSurfaceBounds(); + System.err.println("Test.1: Window bounds : "+window0.getX()+"/"+window0.getY()+" "+window0.getWindowWidth()+"x"+window0.getWindowHeight()+" [wu] within "+screen.getViewportInWindowUnits(window0)+" [wu]"); + System.err.println("Test.1: Window screenRect: "+window0ScreenRect+" [pixels]"); + System.err.println("Test.1: Screen viewport : "+screen.getViewport()+" [pixels]"); + System.err.println("Test.1: Window monitor : "+monitor.getViewport()+" [pixels]"); if( !spanAcrossMonitors ) { - Assert.assertEquals(monitor.getViewport(), window0Rect); + Assert.assertEquals(monitor.getViewport(), window0ScreenRect); } else { List<MonitorDevice> monitorsUsed = monitors; if( null == monitorsUsed ) { monitorsUsed = window0.getScreen().getMonitorDevices(); } Rectangle monitorsUsedViewport = MonitorDevice.unionOfViewports(new Rectangle(), monitorsUsed); - Assert.assertEquals(monitorsUsedViewport, window0Rect); + Assert.assertEquals(monitorsUsedViewport, window0ScreenRect); } - + Thread.sleep(duration); window0.setFullscreen(false); - - window0Rect = new Rectangle(window0.getX(), window0.getY(), window0.getSurfaceWidth(), window0.getSurfaceHeight()); + + window0ScreenRect = window0.getSurfaceBounds(); monitor = window0.getMainMonitor(); - System.err.println("Test.2: Window bounds: "+window0.getX()+"/"+window0.getY()+" "+window0.getSurfaceWidth()+"x"+window0.getSurfaceHeight()+" within "+screen.getViewport()); - System.err.println("Test.2: Window monitor: "+monitor.getViewport()); - + System.err.println("Test.2: Window bounds : "+window0.getX()+"/"+window0.getY()+" "+window0.getWindowWidth()+"x"+window0.getWindowHeight()+" [wu] within "+screen.getViewportInWindowUnits(window0)+" [wu]"); + System.err.println("Test.2: Window screenRect: "+window0ScreenRect+" [pixels]"); + System.err.println("Test.2: Screen viewport : "+screen.getViewport()+" [pixels]"); + System.err.println("Test.2: Window monitor : "+monitor.getViewport()+" [pixels]"); + Thread.sleep(duration); anim.stop(); destroyWindow(window0); diff --git a/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode01dNEWT.java b/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode01dNEWT.java index 4b16a006f..d9ea39365 100644 --- a/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode01dNEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/newt/mm/TestScreenMode01dNEWT.java @@ -3,14 +3,14 @@ * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. Redistributions 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. - * + * * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR @@ -20,12 +20,12 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. */ - + package com.jogamp.opengl.test.junit.newt.mm; import java.io.IOException; @@ -66,13 +66,13 @@ import javax.media.nativewindow.util.RectangleImmutable; * i.e. the original MonitorMode should get reinstated! * </p> * <p> - * Also documents NV RANDR/GL bug, see {@link TestScreenMode01dNEWT#cleanupGL()}.</p> + * Also documents NV RANDR/GL bug, see {@link TestScreenMode01dNEWT#cleanupGL()}.</p> */ @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class TestScreenMode01dNEWT extends UITestCase { static GLProfile glp; static int width, height; - + static int waitTimeShort = 2000; // 2 sec static int waitTimeLong = 8000; // 8 sec @@ -88,13 +88,13 @@ public class TestScreenMode01dNEWT extends UITestCase { public static void releaseClass() throws InterruptedException { Thread.sleep(waitTimeShort); } - + /** * Following configurations results in a SIGSEGV: * <pre> * Ubuntu 11.04 (natty), NV GTX 460, driver [280.10* - 285.03] * </pre> - * + * * Situation: * <pre> * 1 - Create Screen, GLWindow (w/ context) @@ -102,19 +102,19 @@ public class TestScreenMode01dNEWT extends UITestCase { * 3 - Destroy GLWindow (w/ context), Screen * 4 - Create Screen, GLWindow (w/ context) (*) * </pre> - * + * * Step 4 causes the exception within 1st 'glXMakeContextCurrent(..)' call * on the the created GL context. - * + * * Remedy: * <pre> * A) Releasing all resources before step 4 .. works. * B) Holding the native Display/Screen in NEWT also works (ie screen.addReference()). * </pre> - * + * * Hence there must be some correlations with the screen randr mode * and some of the glcontext/gldrawables. - * + * * <pre> * Remedy A) is demonstrated here * Remedy B) is shown in {@link TestScreenMode01bNEWT} @@ -127,7 +127,7 @@ public class TestScreenMode01dNEWT extends UITestCase { GLProfile.initSingleton(); System.err.println("*** cleanupGL.DONE"); } - + static GLWindow createWindow(Screen screen, GLCapabilities caps, int width, int height, boolean onscreen, boolean undecorated) { Assert.assertNotNull(caps); caps.setOnscreen(onscreen); @@ -143,10 +143,10 @@ public class TestScreenMode01dNEWT extends UITestCase { static void destroyWindow(Window window) throws InterruptedException { if(null!=window) { window.destroy(); - Assert.assertTrue(AWTRobotUtil.waitForRealized(window, false)); + Assert.assertTrue(AWTRobotUtil.waitForRealized(window, false)); } } - + @Test public void test01FullscreenChange01() throws InterruptedException { Thread.sleep(waitTimeShort); @@ -160,40 +160,40 @@ public class TestScreenMode01dNEWT extends UITestCase { GLWindow window = createWindow(screen, caps, width, height, true /* onscreen */, false /* undecorated */); Animator animator = new Animator(window); animator.start(); - + final MonitorDevice monitor = window.getMainMonitor(); - + Assert.assertEquals(false, window.isFullscreen()); Assert.assertEquals(width, window.getSurfaceWidth()); Assert.assertEquals(height, window.getSurfaceHeight()); - + window.setFullscreen(true); - Assert.assertEquals(true, window.isFullscreen()); + Assert.assertEquals(true, window.isFullscreen()); Assert.assertEquals(monitor.getViewport().getWidth(), window.getSurfaceWidth()); Assert.assertEquals(monitor.getViewport().getHeight(), window.getSurfaceHeight()); - + Thread.sleep(waitTimeShort); window.setFullscreen(false); Assert.assertEquals(false, window.isFullscreen()); Assert.assertEquals(width, window.getSurfaceWidth()); Assert.assertEquals(height, window.getSurfaceHeight()); - + Thread.sleep(waitTimeShort); animator.stop(); Assert.assertEquals(false, animator.isAnimating()); Assert.assertEquals(false, animator.isStarted()); - + destroyWindow(window); - + Assert.assertEquals(false,window.isVisible()); Assert.assertEquals(false,window.isRealized()); Assert.assertEquals(false,window.isNativeValid()); Assert.assertTrue(AWTRobotUtil.waitForRealized(screen, false)); Assert.assertEquals(false,screen.isNativeValid()); Assert.assertEquals(false,display.isNativeValid()); - + cleanupGL(); } @@ -210,9 +210,9 @@ public class TestScreenMode01dNEWT extends UITestCase { GLWindow window = createWindow(screen, caps, width, height, true /* onscreen */, false /* undecorated */); Assert.assertNotNull(window); - final RectangleImmutable winRect = new Rectangle(window.getX(), window.getY(), window.getSurfaceWidth(), window.getSurfaceHeight()); - final MonitorDevice monitor = screen.getMainMonitor(winRect); - + final RectangleImmutable screenRect = window.getSurfaceBounds(); + final MonitorDevice monitor = screen.getMainMonitor( screenRect ); + List<MonitorMode> monitorModes = monitor.getSupportedModes(); Assert.assertTrue(monitorModes.size()>0); if(monitorModes.size()==1) { @@ -245,14 +245,14 @@ public class TestScreenMode01dNEWT extends UITestCase { monitorModes = MonitorModeUtil.filterByRate(monitorModes, mmOrig.getRefreshRate()); Assert.assertNotNull(monitorModes); Assert.assertTrue(monitorModes.size()>0); - + monitorModes = MonitorModeUtil.getHighestAvailableBpp(monitorModes); Assert.assertNotNull(monitorModes); Assert.assertTrue(monitorModes.size()>0); // set mode { - MonitorMode sm = (MonitorMode) monitorModes.get(0); + MonitorMode sm = monitorModes.get(0); System.err.println("[0] set current: "+sm); final boolean smOk = monitor.setCurrentMode(sm); mmCurrent = monitor.getCurrentMode(); @@ -263,7 +263,7 @@ public class TestScreenMode01dNEWT extends UITestCase { Assert.assertEquals(mmCurrent, monitor.queryCurrentMode()); Assert.assertTrue(smOk); } - + Thread.sleep(waitTimeLong); Assert.assertEquals(true,display.isNativeValid()); @@ -271,10 +271,10 @@ public class TestScreenMode01dNEWT extends UITestCase { Assert.assertEquals(true,window.isNativeValid()); Assert.assertEquals(true,window.isVisible()); - animator.stop(); + animator.stop(); Assert.assertEquals(false, animator.isAnimating()); Assert.assertEquals(false, animator.isStarted()); - + destroyWindow(window); Assert.assertEquals(false,window.isVisible()); @@ -284,7 +284,7 @@ public class TestScreenMode01dNEWT extends UITestCase { Assert.assertEquals(false,screen.isNativeValid()); Assert.assertEquals(false,display.isNativeValid()); - validateScreenModeReset(mmOrig, winRect); + validateScreenModeReset(mmOrig, screenRect); cleanupGL(); } @@ -308,8 +308,8 @@ public class TestScreenMode01dNEWT extends UITestCase { Animator animator = new Animator(window); animator.start(); - final RectangleImmutable winRect = new Rectangle(window.getX(), window.getY(), window.getSurfaceWidth(), window.getSurfaceHeight()); - final MonitorDevice monitor = screen.getMainMonitor(winRect); + final RectangleImmutable screenRect = window.getSurfaceBounds(); + final MonitorDevice monitor = screen.getMainMonitor(screenRect); MonitorMode mmCurrent = monitor.queryCurrentMode(); Assert.assertNotNull(mmCurrent); MonitorMode mmOrig = monitor.getOriginalMode(); @@ -317,7 +317,7 @@ public class TestScreenMode01dNEWT extends UITestCase { System.err.println("[0] orig : "+mmOrig); System.err.println("[0] current: "+mmCurrent); Assert.assertEquals(mmCurrent, mmOrig); - + List<MonitorMode> monitorModes = monitor.getSupportedModes(); if(monitorModes.size()==1) { // no support .. @@ -331,9 +331,9 @@ public class TestScreenMode01dNEWT extends UITestCase { monitorModes = MonitorModeUtil.filterByRate(monitorModes, mmOrig.getRefreshRate()); monitorModes = MonitorModeUtil.getHighestAvailableBpp(monitorModes); - MonitorMode monitorMode = (MonitorMode) monitorModes.get(0); + MonitorMode monitorMode = monitorModes.get(0); Assert.assertNotNull(monitorMode); - + if(preFS) { System.err.println("[0] set FS pre 0: "+window.isFullscreen()); window.setFullscreen(true); @@ -342,7 +342,7 @@ public class TestScreenMode01dNEWT extends UITestCase { System.err.println("[0] set FS pre X: "+window.isFullscreen()); } Thread.sleep(waitTimeShort); - + // set mode { System.err.println("[0] set current: "+monitorMode); @@ -355,7 +355,7 @@ public class TestScreenMode01dNEWT extends UITestCase { Assert.assertEquals(mmCurrent, monitor.queryCurrentMode()); Assert.assertTrue(smOk); } - + if(!preFS) { System.err.println("[0] set FS post 0: "+window.isFullscreen()); window.setFullscreen(true); @@ -364,7 +364,7 @@ public class TestScreenMode01dNEWT extends UITestCase { } Thread.sleep(waitTimeLong); - + if(!preFS) { System.err.println("[0] set !FS post 0: "+window.isFullscreen()); window.setFullscreen(false); @@ -372,7 +372,7 @@ public class TestScreenMode01dNEWT extends UITestCase { System.err.println("[0] set !FS post X: "+window.isFullscreen()); Thread.sleep(waitTimeShort); } - + Assert.assertEquals(true,display.isNativeValid()); Assert.assertEquals(true,screen.isNativeValid()); Assert.assertEquals(true,window.isNativeValid()); @@ -381,7 +381,7 @@ public class TestScreenMode01dNEWT extends UITestCase { animator.stop(); Assert.assertEquals(false, animator.isAnimating()); Assert.assertEquals(false, animator.isStarted()); - + destroyWindow(window); Assert.assertEquals(false,window.isVisible()); @@ -391,7 +391,7 @@ public class TestScreenMode01dNEWT extends UITestCase { Assert.assertEquals(false,screen.isNativeValid()); Assert.assertEquals(false,display.isNativeValid()); - validateScreenModeReset(mmOrig, winRect); + validateScreenModeReset(mmOrig, screenRect); cleanupGL(); } @@ -405,15 +405,15 @@ public class TestScreenMode01dNEWT extends UITestCase { screen.addReference(); Assert.assertEquals(true,display.isNativeValid()); Assert.assertEquals(true,screen.isNativeValid()); - + final MonitorDevice monitor = screen.getMainMonitor(rect); Assert.assertEquals(mmOrig, monitor.getCurrentMode()); - + screen.removeReference(); Assert.assertEquals(false,display.isNativeValid()); Assert.assertEquals(false,screen.isNativeValid()); } - + public static void main(String args[]) throws IOException { String tstname = TestScreenMode01dNEWT.class.getName(); org.junit.runner.JUnitCore.main(tstname); |