On Wednesday 04 August 2010 10:10:17 Stefan Dösinger wrote:
Am 03.08.2010
um 21:26 schrieb Oldřich Jedlička:
DirectX 1 interface allowed creation
of explicit back buffers, so move
the restrictive checks to DirectX 2+
implementations. Don't permit
creating of primary surface back buffer.
The patch(as well as 9 and 10) look OK to me. Patch 6 is OK too.
Patch 8 is missing a call to wined3d to tell it about the new backbuffer.
(Apps will likely still work with the GDI renderer, but not the opengl
ddraw renderer)
That is not so easy as it looks. I've tried to play with that, but there are some difficulties and I don't have time to investigate them deeper:
1. To be able to call IWineD3DDevice_SetFrontBackBuffers, the backbuffer has to be created with Usage |= WINED3DUSAGE_RENDERTARGET (ddraw.c, method ddraw_create_surface). No problem here (if I ignore the fact that I don't know what the rendertarget really means).
2. The IWineD3DDevice_SetFrontBackBuffers call in surface.c, method ddraw_surface_attach_surface, has to use the right ordering of arguments. Afterwards I had problems with freeing some surface (page fault).
3. The method GetAttachedSurface needs fixing for flipping too - it doesn't return the right surface sometimes. When I modified the method, I got other failures/crashes with d3d tests.
From my point of view it would be better to have the flipping for backbuffers unsupported for now - until somebody with more understanding of internals has a better look. I'm not the right person now. The flipping tests are the right ones to start.
The changes from the patch doesn't add the full support, but it doesn't add more failures and it doesn't crash (which is much better than results from my playing this evening).
Thanks.
Oldřich.