http://bugs.winehq.org/show_bug.cgi?id=29934
--- Comment #11 from Ken Thomases ken@codeweavers.com --- (In reply to comment #6)
The issue (in the demo at least) is that wined3d sets a pixel format on the window. When the application itself then tries to initialize GL and set a pixel format on the window SetPixelFormat() fails because one is already set. The attached hack is a workaround, but it's probably non-trivial to fix this properly.
I didn't look into how/when the game is using ddraw vs. OpenGL but is there any value in modifying wglSetPixelFormatWINE() so that it can reset a window's pixel format back to 0? The driver could clear its internal format-related state. User32's __wine_set_pixel_format() doesn't protect against resetting the pixel format. The wineserver will not remove PAINT_HAS_PIXEL_FORMAT from the window's paint_flags, which I believe means the window won't draw via its surface, but if the game is going to use OpenGL that should be fine.