Initial revision
This commit is contained in:
parent
218ca90543
commit
2186d5f3f9
572 changed files with 2 additions and 29666 deletions
91
src/win95/zbuffer.c
Normal file
91
src/win95/zbuffer.c
Normal file
|
@ -0,0 +1,91 @@
|
|||
/***************************************************************************/
|
||||
/* Creation of Z-Buffer */
|
||||
/***************************************************************************/
|
||||
/*
|
||||
* D3DAppICreateZBuffer
|
||||
* Create a Z-Buffer of the appropriate depth and attach it to the back
|
||||
* buffer.
|
||||
*/
|
||||
BOOL
|
||||
D3DAppICreateZBuffer(int w, int h, int driver)
|
||||
{
|
||||
DDSURFACEDESC ddsd;
|
||||
DWORD devDepth;
|
||||
/*
|
||||
* Release any Z-Buffer that might be around just in case.
|
||||
*/
|
||||
RELEASE(d3dappi.lpZBuffer);
|
||||
|
||||
/*
|
||||
* If this driver does not do z-buffering, don't create a z-buffer
|
||||
*/
|
||||
if (!d3dappi.Driver[driver].bDoesZBuffer)
|
||||
return TRUE;
|
||||
|
||||
memset(&ddsd, 0 ,sizeof(DDSURFACEDESC));
|
||||
ddsd.dwSize = sizeof( ddsd );
|
||||
ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS |
|
||||
DDSD_ZBUFFERBITDEPTH;
|
||||
ddsd.ddsCaps.dwCaps = DDSCAPS_ZBUFFER;
|
||||
ddsd.dwHeight = h;
|
||||
ddsd.dwWidth = w;
|
||||
/*
|
||||
* If this is a hardware D3D driver, the Z-Buffer MUST end up in video
|
||||
* memory. Otherwise, it MUST end up in system memory.
|
||||
*/
|
||||
if (d3dappi.Driver[driver].bIsHardware)
|
||||
ddsd.ddsCaps.dwCaps |= DDSCAPS_VIDEOMEMORY;
|
||||
else
|
||||
ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY;
|
||||
/*
|
||||
* Get the Z buffer bit depth from this driver's D3D device description
|
||||
*/
|
||||
devDepth = d3dappi.Driver[driver].Desc.dwDeviceZBufferBitDepth;
|
||||
if (devDepth & DDBD_32)
|
||||
ddsd.dwZBufferBitDepth = 32;
|
||||
else if (devDepth & DDBD_24)
|
||||
ddsd.dwZBufferBitDepth = 24;
|
||||
else if (devDepth & DDBD_16)
|
||||
ddsd.dwZBufferBitDepth = 16;
|
||||
else if (devDepth & DDBD_8)
|
||||
ddsd.dwZBufferBitDepth = 8;
|
||||
else {
|
||||
D3DAppISetErrorString("Unsupported Z-buffer depth requested by device.\n");
|
||||
return FALSE;
|
||||
}
|
||||
LastError = d3dappi.lpDD->lpVtbl->CreateSurface(d3dappi.lpDD, &ddsd,
|
||||
&d3dappi.lpZBuffer,
|
||||
NULL);
|
||||
if(LastError != DD_OK) {
|
||||
D3DAppISetErrorString("CreateSurface for Z-buffer failed.\n%s",
|
||||
D3DAppErrorToString(LastError));
|
||||
goto exit_with_error;
|
||||
}
|
||||
/*
|
||||
* Attach the Z-buffer to the back buffer so D3D will find it
|
||||
*/
|
||||
LastError =
|
||||
d3dappi.lpBackBuffer->lpVtbl->AddAttachedSurface(d3dappi.lpBackBuffer,
|
||||
d3dappi.lpZBuffer);
|
||||
if(LastError != DD_OK) {
|
||||
D3DAppISetErrorString("AddAttachedBuffer failed for Z-Buffer.\n%s",
|
||||
D3DAppErrorToString(LastError));
|
||||
goto exit_with_error;
|
||||
}
|
||||
/*
|
||||
* Find out if it ended up in video memory (FYI).
|
||||
*/
|
||||
LastError = D3DAppIGetSurfDesc(&ddsd, d3dappi.lpZBuffer);
|
||||
if (LastError != DD_OK) {
|
||||
D3DAppISetErrorString("Failed to get surface description of Z buffer.\n%s",
|
||||
D3DAppErrorToString(LastError));
|
||||
goto exit_with_error;
|
||||
}
|
||||
d3dappi.bZBufferInVideo =
|
||||
(ddsd.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY) ? TRUE : FALSE;
|
||||
return TRUE;
|
||||
|
||||
exit_with_error:
|
||||
RELEASE(d3dappi.lpZBuffer);
|
||||
return FALSE;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue