X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fstate_trackers%2Fwgl%2Fshared%2Fstw_framebuffer.c;fp=src%2Fgallium%2Fstate_trackers%2Fwgl%2Fshared%2Fstw_framebuffer.c;h=78a2dbc4d7cd0ff34a49d0e29556be71ebfb57a8;hb=cffe7c8bd0397f8d54e2da16a21c7db4345766b8;hp=7d0e8f46482bae963e0e9247c572595560c49388;hpb=2a2236606fd6ae473a2f4db6ef6d3d5030261316;p=mesa.git 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;