diff options
author | José Fonseca <[email protected]> | 2009-07-03 14:21:55 +0100 |
---|---|---|
committer | José Fonseca <[email protected]> | 2009-07-03 14:21:55 +0100 |
commit | cffe7c8bd0397f8d54e2da16a21c7db4345766b8 (patch) | |
tree | 9c5fa8de149990670ac34619db1016dfd73bd03b | |
parent | 2a2236606fd6ae473a2f4db6ef6d3d5030261316 (diff) |
wgl: Lookup framebuffers by HWND whenever possible.
Some applications create several HDCs for the same window, so spite the WGL
API is geared towards HDCs it is not reliable searching by HDC.
-rw-r--r-- | src/gallium/state_trackers/wgl/shared/stw_framebuffer.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c b/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c index 7d0e8f46482..78a2dbc4d7c 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c +++ b/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c @@ -300,8 +300,18 @@ struct stw_framebuffer * stw_framebuffer_from_hdc_locked( HDC hdc ) { + HWND hwnd; struct stw_framebuffer *fb; + /* + * Some applications create and use several HDCs for the same window, so + * looking up the framebuffer by the HDC is not reliable. Use HWND whenever + * possible. + */ + hwnd = WindowFromDC(hdc); + if(hwnd) + return stw_framebuffer_from_hwnd_locked(hwnd); + for (fb = stw_dev->fb_head; fb != NULL; fb = fb->next) if (fb->hDC == hdc) break; |