summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Faye-Lund <erik.faye-lund@collabora.com>2020-04-08 19:13:52 +0200
committerErik Faye-Lund <erik.faye-lund@collabora.com>2020-04-20 12:02:22 +0200
commit17d959043d768dff67c7872406ef6886008c9428 (patch)
treecf080d6afcbba0996b64851722f7bbc113df191a
parent35ce140e756326b402686e57f318769e4080060d (diff)
wglgears: add support for -fullscreen switch
In order to get the correct screen-resolution on hidpi displays, we need to mark the process as dpi-aware first. Reviewed-by: Brian Paul <brianp@vmware.com>
-rw-r--r--src/wgl/wglgears.c39
1 files changed, 33 insertions, 6 deletions
diff --git a/src/wgl/wglgears.c b/src/wgl/wglgears.c
index 5f18d89d..49e3b611 100644
--- a/src/wgl/wglgears.c
+++ b/src/wgl/wglgears.c
@@ -65,6 +65,7 @@ static GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0;
static GLint gear1, gear2, gear3;
static GLfloat angle = 0.0;
+static GLboolean fullscreen = GL_FALSE;
static GLint samples = 0;
static GLboolean use_srgb = GL_FALSE;
static GLboolean animate = GL_TRUE;
@@ -75,6 +76,7 @@ void usage(void)
{
printf("Usage:\n");
printf("-samples N run in multisample mode with at least N samples\n");
+ printf("-fullscreen run in fullscreen mode\n");
printf("-info display OpenGL renderer info\n");
printf("-geometry WxH+X+Y window geometry\n");
}
@@ -379,10 +381,6 @@ make_window(const char *name, int x, int y, int width, int height)
0, 0, 0
};
-#if WINVER >= 0x0605
- SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE);
-#endif
-
winrect.left = (long)0;
winrect.right = (long)width;
winrect.top = (long) 0;
@@ -402,8 +400,13 @@ make_window(const char *name, int x, int y, int width, int height)
RegisterClass(&wc);
dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
- dwStyle = WS_OVERLAPPEDWINDOW;
- AdjustWindowRectEx(&winrect, dwStyle, FALSE, dwExStyle);
+ if (!fullscreen) {
+ dwStyle = WS_OVERLAPPEDWINDOW;
+ AdjustWindowRectEx(&winrect, dwStyle, FALSE, dwExStyle);
+ }
+ else {
+ dwStyle = WS_POPUP;
+ }
hWnd = CreateWindowEx(dwExStyle, name, name,
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | dwStyle,
@@ -412,6 +415,17 @@ make_window(const char *name, int x, int y, int width, int height)
winrect.bottom - winrect.top,
NULL, NULL, hInst, NULL);
+ if (fullscreen) {
+ DEVMODE devmode;
+ memset(&devmode, 0, sizeof(DEVMODE));
+ devmode.dmSize = sizeof(DEVMODE);
+ devmode.dmPelsWidth = width;
+ devmode.dmPelsHeight = height;
+ devmode.dmBitsPerPel = 24;
+ devmode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
+ ChangeDisplaySettings(&devmode, CDS_FULLSCREEN);
+ }
+
hDC = GetDC(hWnd);
pixelFormat = ChoosePixelFormat(hDC, &pfd);
if (!pixelFormat)
@@ -674,6 +688,9 @@ main(int argc, char *argv[])
samples = strtod(argv[i + 1], NULL);
++i;
}
+ else if (strcmp(argv[i], "-fullscreen") == 0) {
+ fullscreen = GL_TRUE;
+ }
else if (strcmp(argv[i], "-geometry") == 0) {
parse_geometry(argv[i+1], &x, &y, &winWidth, &winHeight);
i++;
@@ -684,6 +701,16 @@ main(int argc, char *argv[])
}
}
+#if WINVER >= 0x0605
+ SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE);
+#endif
+
+ if (fullscreen) {
+ x = 0; y = 0;
+ winWidth = GetSystemMetrics(SM_CXSCREEN);
+ winHeight = GetSystemMetrics(SM_CYSCREEN);
+ }
+
make_window("wglgears", x, y, winWidth, winHeight);
reshape(winWidth, winHeight);
query_vsync();