diff options
author | Erik Faye-Lund <erik.faye-lund@collabora.com> | 2020-04-08 19:13:52 +0200 |
---|---|---|
committer | Erik Faye-Lund <erik.faye-lund@collabora.com> | 2020-04-20 12:02:22 +0200 |
commit | 17d959043d768dff67c7872406ef6886008c9428 (patch) | |
tree | cf080d6afcbba0996b64851722f7bbc113df191a | |
parent | 35ce140e756326b402686e57f318769e4080060d (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.c | 39 |
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(); |