-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hi,
One I don't like here is the hardcoded DDSCAPS_SYSTEMEMORY for the Z buffer. You need it on Windows because of the RGB device and Wine doesn't check, so it kinda works. But I recommend to do something like this:
BOOL use_sysmem_zbuffer;
...
hr = IDirect3DRM2_CreateDeviceFromSurface(d3drm2, &driver, ddraw, surface, &device2); hr = IDirect3DRMDevice2_GetDirect3DDevice2(device2, &d3ddevice2); hr = IDirect3DDevice2_GetRenderTarget(d3ddevice2, &d3drm_surface); hr = IDirectDrawSurface_GetAttachedSurface(d3drm_surface, &caps, &ds); hr = IDirectDrawSurface_GetSurfaceDesc(ds, &desc);
use_sysmem_zbuffer = desc->ddsCaps.dwCaps & DDSCAPS_SYSTEMMEMORY;
... /* Release everything */ /* Create new sysmem surface */ when creating the new Z buffer set DDSCAPS_SYSTEMMEMORY only if use_sysmem_zbuffer is true.
Another thing to test: After destroying the d3drm device is the Z buffer removed from the surface when (a) d3drm created it and (b) you created it?
Cheers, Stefan
On Wed, Jun 24, 2015 at 2:17 AM, Stefan Dösinger stefandoesinger@gmail.com wrote:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hi,
One I don't like here is the hardcoded DDSCAPS_SYSTEMEMORY for the Z buffer. You need it on Windows because of the RGB device and Wine doesn't check, so it kinda works. But I recommend to do something like this:
I had actually tested for DDSCAPS_SYSTEMMEMORY without writing a test for
it but you're right. It should be there.
Another thing to test: After destroying the d3drm device is the Z buffer removed from the surface when (a) d3drm created it and (b) you created it?
There are probably two ways to do this. One is use EnumAttachedSurfaces and increment a counter if a surface is attached (similar to ddraw tests) then check if the counter == 1 (meaning z surface is attached) just after releasing the device for both cases (whether we attached the z surface or let d3drm attach one for us). The other way could be simply calling GetAttachedSurface with DDSCAPS_ZBUFFER as a caps parameter.
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Am 2015-06-24 um 00:27 schrieb Aaryaman Vasishta:
I had actually tested for DDSCAPS_SYSTEMMEMORY without writing a test for it but you're right. It should be there.
Don't write an ok() line for it. It is a quirk of the RGB device that we don't duplicate and that we don't care about. What I mean is: Don't set it unconditionally. Follow the behavior of the d3drm created surface .
The other way could be simply calling GetAttachedSurface with DDSCAPS_ZBUFFER as a caps parameter.
Go for this way, just in the way you handle finding the Z buffer already .