29package com.jogamp.opengl.test.junit.newt.mm;
31import java.io.IOException;
33import com.jogamp.opengl.GLCapabilities;
34import com.jogamp.opengl.GLProfile;
36import org.junit.AfterClass;
37import org.junit.Assert;
38import org.junit.BeforeClass;
40import org.junit.FixMethodOrder;
41import org.junit.runners.MethodSorters;
43import com.jogamp.newt.Display;
44import com.jogamp.newt.MonitorDevice;
45import com.jogamp.newt.NewtFactory;
46import com.jogamp.newt.Screen;
47import com.jogamp.newt.Window;
48import com.jogamp.newt.MonitorMode;
49import com.jogamp.newt.opengl.GLWindow;
50import com.jogamp.newt.util.MonitorModeUtil;
51import com.jogamp.opengl.test.junit.jogl.demos.es2.GearsES2;
52import com.jogamp.opengl.test.junit.util.MiscUtils;
53import com.jogamp.opengl.test.junit.util.NewtTestUtil;
54import com.jogamp.opengl.test.junit.util.UITestCase;
55import com.jogamp.opengl.util.Animator;
59import com.jogamp.nativewindow.util.Dimension;
60import com.jogamp.nativewindow.util.DimensionImmutable;
61import com.jogamp.nativewindow.util.Rectangle;
62import com.jogamp.nativewindow.util.RectangleImmutable;
67@FixMethodOrder(MethodSorters.NAME_ASCENDING)
70 static int width, height;
72 static long waitTimeShort = 2000;
73 static long duration = 6000;
77 setResetXRandRIfX11AfterClass();
85 Thread.sleep(waitTimeShort);
88 static GLWindow createWindow(
final Screen screen,
final GLCapabilities caps,
final String name,
final int screenXPos,
final int screenYPos,
final int width,
final int height)
throws InterruptedException {
89 Assert.assertNotNull(caps);
98 Assert.assertNotNull(window);
99 final long t0 = System.currentTimeMillis();
101 System.err.println(
"Time for visible/pos: "+(System.currentTimeMillis()-t0)+
" ms");
105 static void destroyWindow(
final Window window)
throws InterruptedException {
108 Assert.assertTrue(NewtTestUtil.waitForRealized(window,
false,
null));
115 Assert.assertNotNull(display);
117 Assert.assertNotNull(screen);
121 testScreenModeChangeImpl(screen, monitorVp.
getX(), monitorVp.
getY());
131 Assert.assertNotNull(display);
133 Assert.assertNotNull(screen);
137 System.err.println(
"Test Disabled (1): Monitor count < 2: "+screen);
141 testScreenModeChangeImpl(screen, monitorVp.
getX(), monitorVp.
getY());
148 void testScreenModeChangeImpl(
final Screen screen,
final int screenXPos,
final int screenYPos)
throws InterruptedException {
149 Thread.sleep(waitTimeShort);
152 Assert.assertNotNull(caps);
153 final Display display = screen.getDisplay();
154 System.err.println(
"Test.0: Window screen: "+screen);
156 System.err.println(
"Test.0: Window bounds (pre): screenPos "+screenXPos+
"/"+screenYPos+
" [pixels], windowSize "+width+
"x"+height+
" [wu] within "+screen.getViewport()+
" [pixels]");
158 final GLWindow window0 = createWindow(screen, caps,
"win0", screenXPos, screenYPos, width, height);
159 Assert.assertNotNull(window0);
162 System.err.println(
"Test.0: Window bounds : "+window0WindowBounds+
" [wu] within "+screen.getViewportInWindowUnits()+
" [wu]");
163 System.err.println(
"Test.0: Window size : "+window0SurfaceSize+
" [pixels]");
168 final List<MonitorMode> allMonitorModes = screen.getMonitorModes();
169 Assert.assertTrue(allMonitorModes.size()>0);
170 if(allMonitorModes.size()==1) {
172 System.err.println(
"Your platform has no MonitorMode change support (all), sorry");
173 destroyWindow(window0);
178 System.err.println(
"Test.0: Window monitor: "+monitor);
181 Assert.assertTrue(monitorModes.size()>0);
182 if(monitorModes.size()==1) {
184 System.err.println(
"Your platform has no MonitorMode change support (monitor), sorry");
185 destroyWindow(window0);
188 Assert.assertTrue(allMonitorModes.containsAll(monitorModes));
190 MonitorMode mmCurrent = monitor.getCurrentMode();
191 Assert.assertNotNull(mmCurrent);
192 final MonitorMode mmOrig = monitor.getOriginalMode();
193 Assert.assertNotNull(mmOrig);
194 System.err.println(
"[0] orig : "+mmOrig);
195 System.err.println(
"[0] current: "+mmCurrent);
196 Assert.assertEquals(mmCurrent, mmOrig);
198 monitorModes = MonitorModeUtil.filterByFlags(monitorModes, 0);
199 Assert.assertNotNull(monitorModes);
200 Assert.assertTrue(monitorModes.size()>0);
201 monitorModes = MonitorModeUtil.filterByRotation(monitorModes, 0);
202 Assert.assertNotNull(monitorModes);
203 Assert.assertTrue(monitorModes.size()>0);
204 monitorModes = MonitorModeUtil.filterByResolution(monitorModes,
new Dimension(801, 601));
205 Assert.assertNotNull(monitorModes);
206 Assert.assertTrue(monitorModes.size()>0);
207 monitorModes = MonitorModeUtil.filterByRate(monitorModes, mmOrig.getRefreshRate());
208 Assert.assertNotNull(monitorModes);
209 Assert.assertTrue(monitorModes.size()>0);
211 monitorModes = MonitorModeUtil.getHighestAvailableBpp(monitorModes);
212 Assert.assertNotNull(monitorModes);
213 Assert.assertTrue(monitorModes.size()>0);
217 final MonitorMode mm = monitorModes.get(0);
218 System.err.println(
"[0] set current: "+mm);
219 final boolean smOk = monitor.setCurrentMode(mm);
220 mmCurrent = monitor.getCurrentMode();
221 System.err.println(
"[0] has current: "+mmCurrent+
", changeOK "+smOk);
222 Assert.assertTrue(monitor.isModeChangedByUs());
223 Assert.assertEquals(mm, mmCurrent);
224 Assert.assertNotSame(mmOrig, mmCurrent);
225 Assert.assertEquals(mmCurrent, monitor.queryCurrentMode());
226 Assert.assertTrue(smOk);
229 window0WindowBounds = window0.
getBounds();
231 System.err.println(
"Test.1: Screen : "+screen);
232 System.err.println(
"Test.1: Window bounds : "+window0WindowBounds+
" [wu] within "+screen.getViewportInWindowUnits()+
" [wu]");
233 System.err.println(
"Test.1: Window size : "+window0SurfaceSize+
" [pixels]");
234 System.err.println(
"Test.1: Screen viewport : "+screen.getViewport()+
" [pixels]");
235 System.err.println(
"Test.1: Monitor viewport : "+monitor.getViewport()+
" [pixels], "+monitor.getViewportInWindowUnits()+
" [wu]");
236 System.err.println(
"Test.1: Window main-mon : "+window0.
getMainMonitor());
238 Thread.sleep(duration);
241 Assert.assertEquals(
true,screen.isNativeValid());
243 Assert.assertEquals(
true,window0.
isVisible());
247 System.err.println(
"[1] set orig: "+mmOrig);
248 final boolean smOk = monitor.setCurrentMode(mmOrig);
249 mmCurrent = monitor.getCurrentMode();
250 System.err.println(
"[1] has orig?: "+mmCurrent+
", changeOK "+smOk);
251 Assert.assertFalse(monitor.isModeChangedByUs());
252 Assert.assertEquals(mmOrig, mmCurrent);
253 Assert.assertTrue(smOk);
256 window0WindowBounds = window0.
getBounds();
258 System.err.println(
"Test.2: Screen : "+screen);
259 System.err.println(
"Test.2: Window bounds : "+window0WindowBounds+
" [wu] within "+screen.getViewportInWindowUnits()+
" [wu]");
260 System.err.println(
"Test.2: Window size : "+window0SurfaceSize+
" [pixels]");
261 System.err.println(
"Test.2: Screen viewport : "+screen.getViewport()+
" [pixels]");
262 System.err.println(
"Test.2: Monitor viewport : "+monitor.getViewport()+
" [pixels], "+monitor.getViewportInWindowUnits()+
" [wu]");
263 System.err.println(
"Test.2: Window main-mon : "+window0.
getMainMonitor());
265 Thread.sleep(duration);
267 destroyWindow(window0);
269 Assert.assertEquals(
false,window0.
isVisible());
272 Assert.assertEquals(
true,screen.isNativeValid());
275 public static void main(
final String args[])
throws IOException {
276 for(
int i=0; i<args.length; i++) {
277 if(args[i].equals(
"-time")) {
283 org.junit.runner.JUnitCore.
main(tstname);
abstract boolean isNativeValid()
final List< MonitorMode > getSupportedModes()
Returns a list of immutable MonitorModes supported by this monitor.
static Display createDisplay(final String name)
Create a Display entity.
static Screen createScreen(final Display display, final int index)
Create a Screen entity.
A screen may span multiple MonitorDevices representing their combined virtual size.
abstract int addReference()
See Display#addReference().
abstract int removeReference()
See Display#removeReference().
abstract List< MonitorDevice > getMonitorDevices()
Return a list of available MonitorDevices.
An implementation of GLAutoDrawable and Window interface, using a delegated Window instance,...
final int getSurfaceHeight()
Returns the height of this GLDrawable's surface client area in pixel units.
final boolean isNativeValid()
final void setPosition(final int x, final int y)
Sets the location of the window's client area excluding insets (window decorations) in window units.
final void setTitle(final String title)
final int getSurfaceWidth()
Returns the width of this GLDrawable's surface client area in pixel units.
final void setSize(final int width, final int height)
Sets the size of the window's client area in window units, excluding decorations.
final int[] convertToWindowUnits(final int[] pixelUnitsAndResult)
Converts the given pixel units into window units in place.
final MonitorDevice getMainMonitor()
Returns the MonitorDevice with the highest viewport coverage of this window.
final boolean isVisible()
final void setVisible(final boolean visible)
Calls setVisible(true, visible), i.e.
final Rectangle getBounds()
Returns a newly created Rectangle containing window origin, getX() & getY(), and size,...
final void destroy()
Destroys all resources associated with this GLAutoDrawable, inclusive the GLContext.
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.
Specifies the the OpenGL profile.
static GLProfile getDefault(final AbstractGraphicsDevice device)
Returns a default GLProfile object, reflecting the best for the running platform.
Mode change on separate monitors .
static void releaseClass()
static void main(final String args[])
void testScreenModeChangeSingleQ2()
void testScreenModeChangeSingleQ1()
static long atol(final String str, final long def)
static boolean waitForRealized(final Screen screen, final boolean realized, final Runnable waitAction)
final synchronized boolean start()
Starts this animator, if not running.
final synchronized boolean stop()
Stops this animator.
Immutable Dimension Interface, consisting of it's read only components:
Immutable Rectangle interface, with its position on the top-left.
int getX()
x-position, left of rectangle.
int getY()
y-position, top of rectangle.
void addGLEventListener(GLEventListener listener)
Adds the given listener to the end of this drawable queue.