http://bugs.winehq.org/show_bug.cgi?id=28869
--- Comment #8 from Ken Thomases ken@codeweavers.com --- (In reply to comment #3)
Henri said:
I don't think I can fix this without moving GL processing into its own thread. What happens is that the application creates a GL context, makes it current, and then immediately destroys the DC that context was created on. This works more or less as long as that context stays current. However, when the application then also uses ddraw we have to make a different GL context current for wined3d. Since the original DC was destroyed, there's no way for wined3d to restore the original GL context after it's done.
I probably come off as WGL-extension-happy but we could solve this with an extension. Although wglMakeCurrent() requires passing in a DC, we could provide an alternative function which makes the context current with its last-used drawable(s). The X11 driver already stores sufficient information in the context object to do that. The Mac driver doesn't even require that. The Mac APIs separate the notion of making a context current for the thread from setting its drawable, so we can do just the former.