summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers/wgl
diff options
context:
space:
mode:
authorJosé Fonseca <jfonseca@vmware.com>2009-07-03 14:21:55 +0100
committerJosé Fonseca <jfonseca@vmware.com>2009-07-03 14:21:55 +0100
commitcffe7c8bd0397f8d54e2da16a21c7db4345766b8 (patch)
tree9c5fa8de149990670ac34619db1016dfd73bd03b /src/gallium/state_trackers/wgl
parent2a2236606fd6ae473a2f4db6ef6d3d5030261316 (diff)
downloadexternal_mesa3d-cffe7c8bd0397f8d54e2da16a21c7db4345766b8.zip
external_mesa3d-cffe7c8bd0397f8d54e2da16a21c7db4345766b8.tar.gz
external_mesa3d-cffe7c8bd0397f8d54e2da16a21c7db4345766b8.tar.bz2
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.
Diffstat (limited to 'src/gallium/state_trackers/wgl')
-rw-r--r--src/gallium/state_trackers/wgl/shared/stw_framebuffer.c10
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 7d0e8f4..78a2dbc 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;