diff options
author | José Fonseca <jfonseca@vmware.com> | 2011-05-03 19:09:53 +0100 |
---|---|---|
committer | José Fonseca <jfonseca@vmware.com> | 2011-05-04 13:09:14 +0100 |
commit | 9fbd708932d151b6ababbca1e23d01fb22154446 (patch) | |
tree | a4ab9e2b91db1291b891380356ef53aeb35b15ad | |
parent | c636daa1455121d1db5b98bba09dd8004498c3b8 (diff) |
st/wgl: Allow to create pbuffers bigger than the desktop.
We use a hidden window for pbuffer contexts, but Windows limits window
sizes to the desktop size by default. This means that creating a big
pbuffer on a small resolution single monitor would truncate the pbuffer
size to the desktop.
This change overrides the windows maximum size, allow to create windows
arbitrarily large.
-rw-r--r-- | src/gallium/state_trackers/wgl/stw_ext_pbuffer.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/gallium/state_trackers/wgl/stw_ext_pbuffer.c b/src/gallium/state_trackers/wgl/stw_ext_pbuffer.c index fb5d5e8b92..424d8daccb 100644 --- a/src/gallium/state_trackers/wgl/stw_ext_pbuffer.c +++ b/src/gallium/state_trackers/wgl/stw_ext_pbuffer.c @@ -40,6 +40,30 @@ #include "stw_framebuffer.h" +#define LARGE_WINDOW_SIZE 60000 + + +static LRESULT CALLBACK +WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + MINMAXINFO *pMMI; + switch (uMsg) { + case WM_GETMINMAXINFO: + // Allow to create a window bigger than the desktop + pMMI = (MINMAXINFO *)lParam; + pMMI->ptMaxSize.x = LARGE_WINDOW_SIZE; + pMMI->ptMaxSize.y = LARGE_WINDOW_SIZE; + pMMI->ptMaxTrackSize.x = LARGE_WINDOW_SIZE; + pMMI->ptMaxTrackSize.y = LARGE_WINDOW_SIZE; + break; + default: + break; + } + + return DefWindowProc(hWnd, uMsg, wParam, lParam); +} + + HPBUFFERARB WINAPI wglCreatePbufferARB(HDC _hDC, int iPixelFormat, @@ -109,7 +133,7 @@ wglCreatePbufferARB(HDC _hDC, wc.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); - wc.lpfnWndProc = DefWindowProc; + wc.lpfnWndProc = WndProc; wc.lpszClassName = "wglpbuffer"; wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; RegisterClass(&wc); |