ddraw: Forward the depth stencil buffer to wined3d.
This commit is contained in:
parent
7bee505d37
commit
9329efa88e
|
@ -737,6 +737,8 @@ IDirect3DImpl_7_CreateDevice(IDirect3D7 *iface,
|
||||||
IParentImpl *IndexBufferParent;
|
IParentImpl *IndexBufferParent;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
IDirectDrawSurfaceImpl *target = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, Surface);
|
IDirectDrawSurfaceImpl *target = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, Surface);
|
||||||
|
IDirectDrawSurface7 *depthbuffer = NULL;
|
||||||
|
static DDSCAPS2 depthcaps = { DDSCAPS_ZBUFFER, 0, 0, 0 };
|
||||||
TRACE("(%p)->(%s,%p,%p)\n", iface, debugstr_guid(refiid), Surface, Device);
|
TRACE("(%p)->(%s,%p,%p)\n", iface, debugstr_guid(refiid), Surface, Device);
|
||||||
|
|
||||||
*Device = NULL;
|
*Device = NULL;
|
||||||
|
@ -872,6 +874,19 @@ IDirect3DImpl_7_CreateDevice(IDirect3D7 *iface,
|
||||||
|
|
||||||
This->d3ddevice = object;
|
This->d3ddevice = object;
|
||||||
|
|
||||||
|
/* Look for a depth buffer and enable the Z test if one is found */
|
||||||
|
hr = IDirectDrawSurface7_GetAttachedSurface(Surface,
|
||||||
|
&depthcaps,
|
||||||
|
&depthbuffer);
|
||||||
|
if(depthbuffer)
|
||||||
|
{
|
||||||
|
TRACE("(%p) Depth buffer found, enabling Z test\n", object);
|
||||||
|
IWineD3DDevice_SetRenderState(This->wineD3DDevice,
|
||||||
|
WINED3DRS_ZENABLE,
|
||||||
|
TRUE);
|
||||||
|
IDirectDrawSurface7_Release(depthbuffer);
|
||||||
|
}
|
||||||
|
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -309,6 +309,7 @@ IDirectDrawSurfaceImpl_Release(IDirectDrawSurface7 *iface)
|
||||||
|
|
||||||
/* Unset any index buffer, just to be sure */
|
/* Unset any index buffer, just to be sure */
|
||||||
IWineD3DDevice_SetIndices(ddraw->wineD3DDevice, NULL, 0);
|
IWineD3DDevice_SetIndices(ddraw->wineD3DDevice, NULL, 0);
|
||||||
|
IWineD3DDevice_SetDepthStencilSurface(ddraw->wineD3DDevice, NULL);
|
||||||
|
|
||||||
if(IWineD3DDevice_Uninit3D(ddraw->wineD3DDevice) != D3D_OK)
|
if(IWineD3DDevice_Uninit3D(ddraw->wineD3DDevice) != D3D_OK)
|
||||||
{
|
{
|
||||||
|
@ -779,6 +780,14 @@ IDirectDrawSurfaceImpl_AddAttachedSurface(IDirectDrawSurface7 *iface,
|
||||||
Surf->first_attached = This->first_attached;
|
Surf->first_attached = This->first_attached;
|
||||||
This->next_attached = Surf;
|
This->next_attached = Surf;
|
||||||
|
|
||||||
|
/* Check if we attach a back buffer to the primary */
|
||||||
|
if(Surf->surface_desc.ddsCaps.dwCaps & DDSCAPS_ZBUFFER &&
|
||||||
|
This->surface_desc.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)
|
||||||
|
{
|
||||||
|
IWineD3DDevice_SetDepthStencilSurface(This->ddraw->wineD3DDevice,
|
||||||
|
Surf->WineD3DSurface);
|
||||||
|
}
|
||||||
|
|
||||||
/* MSDN:
|
/* MSDN:
|
||||||
* "This method increments the reference count of the surface being attached."
|
* "This method increments the reference count of the surface being attached."
|
||||||
*/
|
*/
|
||||||
|
@ -838,6 +847,14 @@ IDirectDrawSurfaceImpl_DeleteAttachedSurface(IDirectDrawSurface7 *iface,
|
||||||
Surf->next_attached = NULL;
|
Surf->next_attached = NULL;
|
||||||
Surf->first_attached = Surf;
|
Surf->first_attached = Surf;
|
||||||
|
|
||||||
|
/* Check if we attach a back buffer to the primary */
|
||||||
|
if(Surf->surface_desc.ddsCaps.dwCaps & DDSCAPS_ZBUFFER &&
|
||||||
|
This->surface_desc.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)
|
||||||
|
{
|
||||||
|
IWineD3DDevice_SetDepthStencilSurface(This->ddraw->wineD3DDevice,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
IDirectDrawSurface7_Release(Attach);
|
IDirectDrawSurface7_Release(Attach);
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue