29package com.jogamp.opengl.test.junit.newt.parenting;
32import org.junit.Assert;
33import org.junit.BeforeClass;
35import org.junit.FixMethodOrder;
36import org.junit.runners.MethodSorters;
38import com.jogamp.opengl.*;
40import com.jogamp.opengl.util.Animator;
41import com.jogamp.newt.*;
42import com.jogamp.newt.opengl.*;
44import java.io.IOException;
46import com.jogamp.opengl.test.junit.util.*;
47import com.jogamp.opengl.test.junit.jogl.demos.es2.RedSquareES2;
48import com.jogamp.opengl.test.junit.jogl.demos.es2.GearsES2;
50@FixMethodOrder(MethodSorters.NAME_ASCENDING)
52 static int width, height;
53 static long durationPerTest = 600;
54 static boolean manual =
false;
55 static int loopVisibleToggle = 10;
65 private static void waitForFrames(
final String waitFor,
final int prefixIdx,
67 final long TO,
final boolean doAssert) {
68 final long t0 = System.currentTimeMillis();
72 try { Thread.sleep(16); }
catch (
final InterruptedException e) { }
73 if(
null != glWindow1 ) {
78 if(
null != glWindow2 ) {
83 t1 = System.currentTimeMillis();
84 }
while ( ( 0 == a || 0 == b ) && TO > ( t1 - t0 ) );
85 System.err.println(
"Frames for "+waitFor+
": A"+prefixIdx+
": "+a+
", B"+prefixIdx+
": "+b);
87 if(
null != glWindow1 ) {
88 Assert.assertTrue(
"No frames."+prefixIdx+
" displayed on window1 during "+TO+
"ms", 0 < a);
90 if(
null != glWindow2 ) {
91 Assert.assertTrue(
"No frames."+prefixIdx+
" displayed on window2 during "+TO+
"ms", 0 < b);
103 Assert.assertNotNull(glWindow1);
104 Assert.assertEquals(
false, glWindow1.
isVisible());
106 Assert.assertNull(glWindow1.
getParent());
109 Assert.assertEquals(0,display.getReferenceCount());
110 Assert.assertEquals(
false,display.isNativeValid());
111 Assert.assertNotNull(display.getEDTUtil());
112 Assert.assertEquals(
false,display.getEDTUtil().isRunning());
117 glWindow1.
setTitle(
"test01CreateVisibleDestroy");
120 setDemoFields(demo1, glWindow1,
false);
124 Assert.assertNotNull(glWindow2);
125 Assert.assertEquals(
false, glWindow2.
isVisible());
127 Assert.assertSame(glWindow1,glWindow2.
getParent());
128 Assert.assertSame(screen,glWindow2.
getScreen());
132 setDemoFields(demo2, glWindow2,
false);
135 Assert.assertEquals(0,display.getReferenceCount());
136 Assert.assertEquals(
false,display.isNativeValid());
137 Assert.assertNotNull(display.getEDTUtil());
138 Assert.assertEquals(
true,display.getEDTUtil().isRunning());
144 for(
int i=1; i<=loopVisibleToggle; i++) {
147 System.err.println(
"XXX VISIBLE."+i+
" -> TRUE");
149 Assert.assertEquals(
true, glWindow1.
isVisible());
151 Assert.assertEquals(
true, glWindow2.
isVisible());
153 Assert.assertEquals(1,display.getReferenceCount());
154 Assert.assertEquals(
true,display.isNativeValid());
155 Assert.assertNotNull(display.getEDTUtil());
156 Assert.assertEquals(
true,display.getEDTUtil().isRunning());
160 waitForFrames(
"window1.setVisible(true)", 1, glWindow1, glWindow2, 2000,
true);
162 System.err.println(
"XXX VISIBLE."+i+
" -> FALSE");
164 Assert.assertEquals(
false, glWindow1.
isVisible());
166 Assert.assertEquals(
false, glWindow2.
isVisible());
174 System.err.println(
"XXX VISIBLE.3 -> TRUE");
176 Assert.assertEquals(
true, glWindow1.
isVisible());
178 Assert.assertEquals(
true, glWindow2.
isVisible());
180 waitForFrames(
"window1.setVisible(true)", 2, glWindow1, glWindow2, 2000,
true);
187 Assert.assertEquals(
true, animator1.isAnimating());
188 Assert.assertEquals(
false, animator1.
isPaused());
189 Assert.assertNotNull(animator1.
getThread());
193 Assert.assertEquals(
true, animator2.isAnimating());
194 Assert.assertEquals(
false, animator2.
isPaused());
195 Assert.assertNotNull(animator2.
getThread());
199 waitForFrames(
"animator.start()", 3, glWindow1, glWindow2, 2000,
true);
201 Assert.assertEquals(
true, animator1.
pause());
202 Assert.assertEquals(
false, animator1.isAnimating());
203 Assert.assertEquals(
true, animator1.
isPaused());
204 Assert.assertNotNull(animator1.
getThread());
205 Assert.assertEquals(
true, animator2.
pause());
206 Assert.assertEquals(
false, animator2.isAnimating());
207 Assert.assertEquals(
true, animator2.
isPaused());
208 Assert.assertNotNull(animator2.
getThread());
212 Assert.assertEquals(
true, animator1.
resume());
213 Assert.assertEquals(
true, animator1.isAnimating());
214 Assert.assertEquals(
false, animator1.
isPaused());
215 Assert.assertNotNull(animator1.
getThread());
216 Assert.assertEquals(
true, animator2.
resume());
217 Assert.assertEquals(
true, animator2.isAnimating());
218 Assert.assertEquals(
false, animator2.
isPaused());
219 Assert.assertNotNull(animator2.
getThread());
220 waitForFrames(
"animator.resume()", 4, glWindow1, glWindow2, 2000,
true);
223 Assert.assertEquals(
false, animator1.isAnimating());
224 Assert.assertEquals(
false, animator1.
isPaused());
225 Assert.assertEquals(
null, animator1.
getThread());
227 Assert.assertEquals(
false, animator2.isAnimating());
228 Assert.assertEquals(
false, animator2.
isPaused());
229 Assert.assertEquals(
null, animator2.
getThread());
231 Assert.assertEquals(1,display.getReferenceCount());
232 Assert.assertEquals(
true,display.isNativeValid());
233 Assert.assertNotNull(display.getEDTUtil());
234 Assert.assertEquals(
true,display.getEDTUtil().isRunning());
240 Assert.assertEquals(
true, glWindow1.
isVisible());
242 Assert.assertEquals(
false, glWindow2.
isVisible());
245 Assert.assertEquals(1,display.getReferenceCount());
246 Assert.assertEquals(
true,display.isNativeValid());
247 Assert.assertNotNull(display.getEDTUtil());
248 Assert.assertEquals(
true,display.getEDTUtil().isRunning());
254 Assert.assertEquals(
false, glWindow1.
isVisible());
256 Assert.assertEquals(
false, glWindow2.
isVisible());
259 Assert.assertEquals(0,display.getReferenceCount());
260 Assert.assertEquals(
false,display.isNativeValid());
261 Assert.assertNotNull(display.getEDTUtil());
262 Assert.assertEquals(
false,display.getEDTUtil().isRunning());
272 System.err.println(
"XXX VISIBLE.4 -> TRUE");
274 Assert.assertEquals(
true, glWindow1.
isVisible());
276 Assert.assertEquals(
true, glWindow2.
isVisible());
278 waitForFrames(
"window1.setVisible(true) recreate", 5, glWindow1, glWindow2, 2000,
true);
280 Assert.assertEquals(1,display.getReferenceCount());
281 Assert.assertEquals(
true,display.isNativeValid());
282 Assert.assertNotNull(display.getEDTUtil());
283 Assert.assertEquals(
true,display.getEDTUtil().isRunning());
292 Assert.assertEquals(0,display.getReferenceCount());
293 Assert.assertEquals(
false,display.isNativeValid());
294 Assert.assertNotNull(display.getEDTUtil());
295 Assert.assertEquals(
false,display.getEDTUtil().isRunning());
303 Assert.assertEquals(0,display.getReferenceCount());
304 Assert.assertEquals(
false,display.isNativeValid());
305 Assert.assertNotNull(display.getEDTUtil());
306 Assert.assertEquals(
false,display.getEDTUtil().isRunning());
317 test02ReparentTop2WinImpl(
true);
325 test02ReparentTop2WinImpl(
false);
332 final int reparentHints = reparentRecreate ? Window.REPARENT_HINT_FORCE_RECREATION : 0;
339 glWindow1.
setTitle(
"test02ReparentTop2Win");
342 setDemoFields(demo1, glWindow1,
false);
347 Assert.assertEquals(0,display1.getReferenceCount());
348 Assert.assertEquals(
false,display1.isNativeValid());
349 Assert.assertNotNull(display1.getEDTUtil());
350 Assert.assertEquals(
true,display1.getEDTUtil().isRunning());
358 setDemoFields(demo2, glWindow2,
false);
360 Assert.assertSame(screen1, glWindow2.
getScreen());
363 Assert.assertEquals(0,display1.getReferenceCount());
364 Assert.assertEquals(
false,display1.isNativeValid());
365 Assert.assertNotNull(display1.getEDTUtil());
366 Assert.assertEquals(
true,display1.getEDTUtil().isRunning());
373 Assert.assertEquals(1,display1.getReferenceCount());
374 Assert.assertEquals(
true,display1.isNativeValid());
375 Assert.assertNotNull(display1.getEDTUtil());
376 Assert.assertEquals(
true,display1.getEDTUtil().isRunning());
380 Assert.assertEquals(
true, glWindow1.
isVisible());
381 waitForFrames(
"window1.setVisible(true)", 1, glWindow1,
null, 2000,
true);
385 Assert.assertEquals(1,display1.getReferenceCount());
386 Assert.assertEquals(
true,display1.isNativeValid());
387 Assert.assertNotNull(display1.getEDTUtil());
388 Assert.assertEquals(
true,display1.getEDTUtil().isRunning());
392 Assert.assertEquals(
true, glWindow2.
isVisible());
393 waitForFrames(
"window2.setVisible(true)", 2, glWindow1, glWindow2, 2000,
true);
405 Thread.sleep(durationPerTest);
409 Assert.assertEquals(
true, glWindow1.
isVisible());
410 Assert.assertEquals(
true, glWindow2.
isVisible());
412 Assert.assertEquals(
false, glWindow2.
isVisible());
413 Assert.assertEquals(
true, glWindow1.
isVisible());
418 Assert.assertEquals(
true, glWindow1.
isVisible());
419 Assert.assertEquals(
false, glWindow2.
isVisible());
421 Assert.assertEquals(
true, glWindow2.
isVisible());
422 Assert.assertEquals(
true, glWindow1.
isVisible());
427 Assert.assertEquals(
true, glWindow2.
isVisible());
429 reparentAction = glWindow2.
reparentWindow(glWindow1, -1, -1, reparentHints);
432 Assert.assertEquals(
true, glWindow2.
isVisible());
434 Assert.assertSame(glWindow1,glWindow2.
getParent());
435 waitForFrames(
"reparentWindow.child(parent, "+reparentRecreate+
"), "+reparentAction, 10, glWindow1, glWindow2, 2000,
true);
437 Assert.assertEquals(1,display1.getReferenceCount());
438 Assert.assertEquals(
true,display1.isNativeValid());
439 Assert.assertNotNull(display1.getEDTUtil());
440 Assert.assertEquals(
true,display1.getEDTUtil().isRunning());
442 Assert.assertSame(screen1,glWindow2.
getScreen());
451 Assert.assertEquals(
true, glWindow1.
isVisible());
452 Assert.assertEquals(
true, glWindow2.
isVisible());
454 Assert.assertEquals(
false, glWindow2.
isVisible());
455 Assert.assertEquals(
true, glWindow1.
isVisible());
460 Assert.assertEquals(
true, glWindow1.
isVisible());
461 Assert.assertEquals(
false, glWindow2.
isVisible());
463 Assert.assertEquals(
true, glWindow2.
isVisible());
464 Assert.assertEquals(
true, glWindow1.
isVisible());
469 Assert.assertEquals(
true, glWindow2.
isVisible());
471 reparentAction = glWindow2.
reparentWindow(
null, -1, -1, reparentHints);
473 Assert.assertEquals(
true, glWindow2.
isVisible());
475 Assert.assertNull(glWindow2.
getParent());
476 waitForFrames(
"reparentWindow.top(parent, "+reparentRecreate+
"), "+reparentAction, 11, glWindow1, glWindow2, 2000,
true);
478 Assert.assertEquals(1,display1.getReferenceCount());
479 Assert.assertEquals(
true,display1.isNativeValid());
480 Assert.assertNotNull(display1.getEDTUtil());
481 Assert.assertEquals(
true,display1.getEDTUtil().isRunning());
483 Assert.assertSame(screen1,glWindow2.
getScreen());
497 Assert.assertEquals(
false, animator1.isAnimating());
498 Assert.assertEquals(
false, animator1.
isPaused());
499 Assert.assertEquals(
null, animator1.
getThread());
501 Assert.assertEquals(
false, animator2.isAnimating());
502 Assert.assertEquals(
false, animator2.
isPaused());
503 Assert.assertEquals(
null, animator2.
getThread());
506 Assert.assertEquals(1,display1.getReferenceCount());
507 Assert.assertEquals(
true,display1.isNativeValid());
508 Assert.assertNotNull(display1.getEDTUtil());
509 Assert.assertEquals(
true,display1.getEDTUtil().isRunning());
517 Assert.assertEquals(
true, glWindow1.
isVisible());
519 Assert.assertEquals(
false, glWindow2.
isVisible());
521 Assert.assertEquals(1,display1.getReferenceCount());
522 Assert.assertEquals(
true,display1.isNativeValid());
523 Assert.assertNotNull(display1.getEDTUtil());
524 Assert.assertEquals(
true,display1.getEDTUtil().isRunning());
533 Assert.assertEquals(
false, glWindow1.
isVisible());
535 Assert.assertEquals(
false, glWindow2.
isVisible());
537 Assert.assertEquals(0,display1.getReferenceCount());
538 Assert.assertEquals(
false,display1.isNativeValid());
539 Assert.assertNotNull(display1.getEDTUtil());
540 Assert.assertEquals(
false,display1.getEDTUtil().isRunning());
552 test03ReparentWin2TopImpl(
true);
560 test03ReparentWin2TopImpl(
false);
564 final int reparentHints = reparentRecreate ? Window.REPARENT_HINT_FORCE_RECREATION : 0;
575 glWindow1.
setTitle(
"test03ReparentWin2Top");
578 setDemoFields(demo1, glWindow1,
false);
581 Assert.assertEquals(0,display1.getReferenceCount());
582 Assert.assertEquals(
false,display1.isNativeValid());
583 Assert.assertNotNull(display1.getEDTUtil());
584 Assert.assertEquals(
true,display1.getEDTUtil().isRunning());
594 setDemoFields(demo2, glWindow2,
false);
597 Assert.assertEquals(0,display2.getReferenceCount());
598 Assert.assertEquals(
false,display2.isNativeValid());
599 Assert.assertNotNull(display2.getEDTUtil());
600 Assert.assertEquals(
true,display2.getEDTUtil().isRunning());
605 Assert.assertSame(screen1,glWindow2.
getScreen());
611 Assert.assertEquals(1,display1.getReferenceCount());
612 Assert.assertEquals(
true,display1.isNativeValid());
613 Assert.assertNotNull(display1.getEDTUtil());
614 Assert.assertEquals(
true,display1.getEDTUtil().isRunning());
617 Assert.assertSame(glWindow1,glWindow2.
getParent());
618 Assert.assertSame(screen1,glWindow2.
getScreen());
620 waitForFrames(
"window1.setVisible(true)", 1, glWindow1, glWindow2, 2000,
true);
632 Thread.sleep(durationPerTest);
636 Assert.assertEquals(
true, glWindow1.
isVisible());
637 Assert.assertEquals(
true, glWindow2.
isVisible());
639 Assert.assertEquals(
false, glWindow2.
isVisible());
640 Assert.assertEquals(
true, glWindow1.
isVisible());
645 Assert.assertEquals(
true, glWindow1.
isVisible());
646 Assert.assertEquals(
false, glWindow2.
isVisible());
648 Assert.assertEquals(
true, glWindow2.
isVisible());
649 Assert.assertEquals(
true, glWindow1.
isVisible());
654 Assert.assertEquals(
true, glWindow2.
isVisible());
655 reparentAction = glWindow2.
reparentWindow(
null, -1, -1, reparentHints);
657 Assert.assertEquals(
true, glWindow2.
isVisible());
659 waitForFrames(
"reparentWindow.top(parent, "+reparentRecreate+
"), "+reparentAction, 10, glWindow1, glWindow2, 2000,
true);
661 Assert.assertNull(glWindow2.
getParent());
662 Assert.assertSame(screen1,glWindow2.
getScreen());
669 Assert.assertEquals(
true, glWindow1.
isVisible());
670 Assert.assertEquals(
true, glWindow2.
isVisible());
672 Assert.assertEquals(
false, glWindow2.
isVisible());
673 Assert.assertEquals(
true, glWindow1.
isVisible());
678 Assert.assertEquals(
true, glWindow1.
isVisible());
679 Assert.assertEquals(
false, glWindow2.
isVisible());
681 Assert.assertEquals(
true, glWindow2.
isVisible());
682 Assert.assertEquals(
true, glWindow1.
isVisible());
687 Assert.assertEquals(
true, glWindow2.
isVisible());
688 reparentAction = glWindow2.
reparentWindow(glWindow1, -1, -1, reparentHints);
690 Assert.assertEquals(
true, glWindow2.
isVisible());
692 waitForFrames(
"reparentWindow.child(parent, "+reparentRecreate+
"), "+reparentAction, 11, glWindow1, glWindow2, 2000,
true);
694 Assert.assertSame(glWindow1,glWindow2.
getParent());
695 Assert.assertSame(screen1,glWindow2.
getScreen());
707 Assert.assertEquals(
false, animator1.isAnimating());
708 Assert.assertEquals(
false, animator1.
isPaused());
709 Assert.assertEquals(
null, animator1.
getThread());
711 Assert.assertEquals(
false, animator2.isAnimating());
712 Assert.assertEquals(
false, animator2.
isPaused());
713 Assert.assertEquals(
null, animator2.
getThread());
715 Assert.assertEquals(1,display1.getReferenceCount());
716 Assert.assertEquals(
true,display1.isNativeValid());
717 Assert.assertNotNull(display1.getEDTUtil());
718 Assert.assertEquals(
true,display1.getEDTUtil().isRunning());
721 Assert.assertSame(glWindow1,glWindow2.
getParent());
722 Assert.assertSame(screen1,glWindow2.
getScreen());
728 Assert.assertEquals(
false, glWindow1.
isVisible());
730 Assert.assertEquals(
false, glWindow2.
isVisible());
732 Assert.assertEquals(0,display1.getReferenceCount());
733 Assert.assertEquals(
false,display1.isNativeValid());
734 Assert.assertNotNull(display1.getEDTUtil());
735 Assert.assertEquals(
false,display1.getEDTUtil().isRunning());
739 Assert.assertEquals(0,display2.getReferenceCount());
740 Assert.assertEquals(
false,display2.isNativeValid());
741 Assert.assertNotNull(display2.getEDTUtil());
742 Assert.assertEquals(
false,display2.getEDTUtil().isRunning());
760 Assert.assertNotNull(demo);
761 Assert.assertNotNull(glWindow);
771 static int atoi(
final String a) {
774 i = Integer.parseInt(a);
775 }
catch (
final Exception ex) { ex.printStackTrace(); }
779 public static void main(
final String args[])
throws IOException {
780 boolean asMain =
false;
781 for(
int i=0; i<args.length; i++) {
782 if(args[i].equals(
"-time")) {
783 durationPerTest = atoi(args[++i]);
784 }
else if(args[i].equals(
"-loopvt")) {
785 loopVisibleToggle = atoi(args[++i]);
786 }
else if(args[i].equals(
"-manual")) {
788 }
else if(args[i].equals(
"-asMain")) {
792 System.err.println(
"durationPerTest: "+durationPerTest);
799 }
catch (
final Throwable t ) {
804 org.junit.runner.JUnitCore.
main(tstname);
static int getActiveDisplayNumber()
A screen may span multiple MonitorDevices representing their combined virtual size.
abstract Display getDisplay()
abstract int getReferenceCount()
abstract boolean isNativeValid()
An implementation of GLAutoDrawable and Window interface, using a delegated Window instance,...
final NativeWindow getParent()
final boolean isNativeValid()
final ReparentOperation reparentWindow(final NativeWindow newParent, final int x, final int y, final int hints)
Change this window's parent window.
final void setTitle(final String title)
final void setSize(final int width, final int height)
Sets the size of the window's client area in window units, excluding decorations.
final boolean isVisible()
final void setVisible(final boolean visible)
Calls setVisible(true, visible), i.e.
final void destroy()
Destroys all resources associated with this GLAutoDrawable, inclusive the GLContext.
final Window getDelegatedWindow()
If the implementation uses delegation, return the delegated Window instance, otherwise return this in...
static GLWindow create(final GLCapabilitiesImmutable caps)
Creates a new GLWindow attaching a new Window referencing a new default Screen and default Display wi...
Specifies a set of OpenGL capabilities.
void test02aReparentTop2WinReparentRecreate()
void test03ReparentWin2TopImpl(final boolean reparentRecreate)
void test01CreateVisibleDestroy()
void test02ReparentTop2WinImpl(final boolean reparentRecreate)
static void main(final String args[])
void test03aReparentWin2TopReparentRecreate()
void test02bReparentTop2WinReparentNative()
void test03bReparentWin2TopReparentNative()
static void setDemoFields(final GLEventListener demo, final GLWindow glWindow, final boolean debug)
static boolean setFieldIfExists(final Object instance, final String fieldName, final Object value)
final long getTotalFPSDuration()
final synchronized Thread getThread()
final void setUpdateFPSFrames(final int frames, final PrintStream out)
final synchronized boolean pause()
Pauses this animator.
final synchronized boolean resume()
Resumes animation if paused.
final synchronized boolean start()
Starts this animator, if not running.
final synchronized boolean isPaused()
Indicates whether this animator is started and either manually paused or paused automatically due to ...
final synchronized boolean stop()
Stops this animator.
Reparenting operation types.
ACTION_INVALID
No native reparenting valid.
Specifying NEWT's Window functionality:
void resetFPSCounter()
Reset all performance counter (startTime, currentTime, frame number)
void addGLEventListener(GLEventListener listener)
Adds the given listener to the end of this drawable queue.
Declares events which client code can use to manage OpenGL rendering into a GLAutoDrawable.