29package com.jogamp.opengl.test.junit.newt.mm;
31import java.io.IOException;
32import com.jogamp.opengl.GLCapabilities;
33import com.jogamp.opengl.GLProfile;
35import org.junit.AfterClass;
36import org.junit.Assert;
37import org.junit.BeforeClass;
39import org.junit.FixMethodOrder;
40import org.junit.runners.MethodSorters;
42import com.jogamp.common.os.Platform;
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.NewtTestUtil;
53import com.jogamp.opengl.test.junit.util.UITestCase;
54import com.jogamp.opengl.util.Animator;
57import com.jogamp.nativewindow.util.Dimension;
75@FixMethodOrder(MethodSorters.NAME_ASCENDING)
79 static int waitTimeShort = 2000;
80 static int waitTimeLong = 8000;
84 setResetXRandRIfX11AfterClass();
90 Thread.sleep(waitTimeShort);
93 static GLWindow createWindow(
final Screen screen,
final GLCapabilities caps,
final String name,
final int x,
final int y,
final int width,
final int height) {
94 Assert.assertNotNull(caps);
102 Assert.assertNotNull(window);
106 static void destroyWindow(
final Window window)
throws InterruptedException {
115 testScreenModeChangeImpl(
true);
120 testScreenModeChangeImpl(
false);
123 void testScreenModeChangeImpl(
final boolean preVis)
throws InterruptedException {
125 Assert.assertNotNull(caps);
127 Assert.assertNotNull(display);
129 Assert.assertNotNull(screen);
131 final int swidth = screen.
getWidth();
134 final GLWindow window = createWindow(screen, caps,
"win0", 0, 0, 640, 480);
140 Assert.assertNotNull(window);
143 Assert.assertTrue(allMonitorModes.size()>0);
144 if(allMonitorModes.size()==1) {
146 System.err.println(
"Your platform has no MonitorMode change support (all), sorry");
147 destroyWindow(window);
153 Assert.assertTrue(monitorModes.size()>0);
154 if(monitorModes.size()==1) {
156 System.err.println(
"Your platform has no MonitorMode change support (monitor), sorry");
157 destroyWindow(window);
160 Assert.assertTrue(allMonitorModes.containsAll(monitorModes));
162 final Animator animator =
new Animator(window);
165 MonitorMode mmCurrent = monitor.queryCurrentMode();
166 Assert.assertNotNull(mmCurrent);
167 final MonitorMode mmOrig = monitor.getOriginalMode();
168 Assert.assertNotNull(mmOrig);
169 System.err.println(
"[0] orig : "+mmOrig);
170 System.err.println(
"[0] current: "+mmCurrent);
171 Assert.assertEquals(mmCurrent, mmOrig);
173 monitorModes = MonitorModeUtil.filterByFlags(monitorModes, 0);
174 Assert.assertNotNull(monitorModes);
175 Assert.assertTrue(monitorModes.size()>0);
176 monitorModes = MonitorModeUtil.filterByRotation(monitorModes, 90);
177 if(
null==monitorModes || Platform.getOSType() == Platform.OSType.MACOS ) {
179 System.err.println(
"Your platform has no rotation support, sorry");
181 destroyWindow(window);
184 monitorModes = MonitorModeUtil.filterByResolution(monitorModes,
new Dimension(swidth, sheight));
185 Assert.assertNotNull(monitorModes);
186 Assert.assertTrue(monitorModes.size()>0);
187 monitorModes = MonitorModeUtil.filterByRate(monitorModes, mmOrig.getRefreshRate());
188 Assert.assertNotNull(monitorModes);
189 Assert.assertTrue(monitorModes.size()>0);
191 monitorModes = MonitorModeUtil.getHighestAvailableBpp(monitorModes);
192 Assert.assertNotNull(monitorModes);
193 Assert.assertTrue(monitorModes.size()>0);
197 final MonitorMode mm = monitorModes.get(0);
198 System.err.println(
"[0] set current: "+mm);
199 final boolean smOk = monitor.setCurrentMode(mm);
200 mmCurrent = monitor.getCurrentMode();
201 System.err.println(
"[0] has current: "+mmCurrent+
", changeOK "+smOk);
203 System.err.println(
"ERROR: Full MonitorMode w/ rotation failure - Expected on some platforms (NV driver) - Tolerated for now.");
205 destroyWindow(window);
208 Assert.assertTrue(monitor.isModeChangedByUs());
209 Assert.assertEquals(mm, mmCurrent);
210 Assert.assertNotSame(mmOrig, mmCurrent);
211 Assert.assertEquals(mmCurrent, monitor.queryCurrentMode());
212 Assert.assertTrue(smOk);
220 Thread.sleep(waitTimeLong);
228 System.err.println(
"[1] set orig: "+mmOrig);
229 final boolean smOk = monitor.setCurrentMode(mmOrig);
230 mmCurrent = monitor.getCurrentMode();
231 System.err.println(
"[1] has orig?: "+mmCurrent+
", changeOK "+smOk);
232 Assert.assertFalse(monitor.isModeChangedByUs());
233 Assert.assertEquals(mmOrig, mmCurrent);
234 Assert.assertTrue(smOk);
236 Thread.sleep(waitTimeShort);
245 Assert.assertEquals(
true,window.
isVisible());
248 destroyWindow(window);
250 Assert.assertEquals(
false,window.
isVisible());
252 Assert.assertTrue(NewtTestUtil.waitForRealized(screen,
false,
null));
257 public static void main(
final String args[])
throws IOException {
259 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 List< MonitorMode > getMonitorModes()
Return a list of all MonitorModes for all MonitorDevices.
abstract boolean isNativeValid()
abstract void createNative()
Manual trigger the native creation, if not done yet.. This is useful to be able to request the com....
An implementation of GLAutoDrawable and Window interface, using a delegated Window instance,...
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 void setSize(final int width, final int height)
Sets the size of the window's client area in window units, excluding decorations.
final MonitorDevice getMainMonitor()
Returns the MonitorDevice with the highest viewport coverage of this window.
final boolean setFullscreen(final boolean fullscreen)
Enable or disable fullscreen mode for this window.
final boolean isVisible()
final void setVisible(final boolean visible)
Calls setVisible(true, visible), i.e.
final void setUndecorated(final boolean value)
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.
Tests MonitorMode change w/ changed rotation and fullscreen.
void testScreenModeChange01_PreFull()
static void main(final String args[])
static void releaseClass()
void testScreenModeChange02_PostFull()
static boolean waitForRealized(final Screen screen, final boolean realized, final Runnable waitAction)
Specifying NEWT's Window functionality:
void addGLEventListener(GLEventListener listener)
Adds the given listener to the end of this drawable queue.