http://bugs.winehq.org/show_bug.cgi?id=18490
--- Comment #6 from Warren Dumortier nwarrenfl@gmail.com 2009-10-11 12:47:39 --- I've contacted Stefan Dossinger and he says this is because X11 doesn't allow opengl rendering to the root window. He also said we should write a test that does this on Windows and see what it returns:
Q1: What does Windows return? Q2: If Windows creates the device properly, what happens if you render to it? Q3: What happens if you present the rendering with a dest window override in swapchain::present? Q4: What happens if you present without a dest window override?
The crash happens because SetPixelFormat is called on screen device context (GetDC(NULL)). Wine refuses to set pixel format and returns FALSE which causes the crash.
It seems there could be a solution if we know the answer of Q3. In d3d, you can change the window the rendering is copied to at the end of the draw, so the app might set up the device to draw to the NULL window first and later on send the output to a non-NULL window. For this we could render offscreen, and later when we get the real window switch to onscreen rendering.