[PATCH 14/15] wined3d: Add device->isInDraw checks in LoadLocation.
stefan at codeweavers.com
Mon Apr 7 03:05:05 CDT 2008
Am Montag, 7. April 2008 08:30:20 schrieb Alexander Dorofeyev:
> Oh, you are right. Must be fixed some other way then, I guess, maybe moving
> assignment to isInDraw lower or moving ActivateContext higher. From what I
> understood from Bioshock bug (http://bugs.winehq.org/show_bug.cgi?id=9973),
> moving ActivateContext in drawPrimitive produces bugs in other programs,
> right? Could you add to that bug a short description of what games etc
> needed to reproduce these problems?
There are two design issues here:
One is that FindContext, which executes before the wglMakeCurrent call does
OpenGL calls. In some situations it has to do, e.g. reading the texture from
a Pbuffer before switching to some other buffer, in some cases it can't, e.g.
on a thread switch. I am not sure about the solution yet, but maybe we have
to ActivateContext the old render target in FindContext before reading back
textures if we find a thread switch and target switch at the same time.
The other issue, and that's the problem with Bioshock, is that ActivateContext
isn't really aware of the FBO stuff. I've been discussing this with Henri
some time ago, but we didn't find a solution. The nicest way would be to make
ActivateContext select tge fbo, color buffer 0 and the depth stencil, and to
make color buffers 1+ regular states handled in the state table.
Unfortunately that doesn't work because drivers don't like it if we activate
an incomplete fbo.
More information about the wine-devel