Quantcast
Channel: GameDev.net
Viewing all articles
Browse latest Browse all 17560

Depth buffer not working

$
0
0
Hi Guys,

I am having trouble with my depth buffer in my project.

I am creating it as follows;

int Engine::DepthStencilCreate()
{
	D3D11_TEXTURE2D_DESC descDepth;
	descDepth.Width = nWidth;
	descDepth.Height = nHeight;
	descDepth.MipLevels = 1;
	descDepth.ArraySize = 1;
	descDepth.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
	descDepth.SampleDesc.Count = nFsaa;
	descDepth.SampleDesc.Quality = 0;
	descDepth.Usage = D3D11_USAGE_DEFAULT;
	descDepth.BindFlags = D3D11_BIND_DEPTH_STENCIL;
	descDepth.CPUAccessFlags = 0;
	descDepth.MiscFlags = 0;
	if (d3dDevice->CreateTexture2D(&descDepth, NULL, &pDepthStencil))
	{
		MessageBox(NULL, "Failed to create depth buffer", "Error", NULL);
		return 1;
	}

	D3D11_DEPTH_STENCIL_DESC dsDesc;
	dsDesc.DepthEnable = true;
	dsDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;
	dsDesc.DepthFunc = D3D11_COMPARISON_LESS;

	// Stencil test parameters
	dsDesc.StencilEnable = true;
	dsDesc.StencilReadMask = 0xFF;
	dsDesc.StencilWriteMask = 0xFF;

	// Stencil operations if pixel is front-facing
	dsDesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
	dsDesc.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_INCR;
	dsDesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
	dsDesc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS;

	// Stencil operations if pixel is back-facing
	dsDesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
	dsDesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_DECR;
	dsDesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
	dsDesc.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS;

	// Create depth stencil state
	if(d3dDevice->CreateDepthStencilState(&dsDesc, &pDSState))
	{
		MessageBox(NULL, "Failed to create depth stencil state", "Error", NULL);
		return 1;
	}

	// Bind depth stencil state
	d3dContext->OMSetDepthStencilState(pDSState, 1);

	D3D11_DEPTH_STENCIL_VIEW_DESC descDSV;
	descDSV.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
	descDSV.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DMS;	//D3D11_DSV_DIMENSION_TEXTURE2D;
	descDSV.Texture2D.MipSlice = 0;
	descDSV.Flags = 0;

	// Create the depth stencil view
	//ID3D11DepthStencilView* pDSV;
	if (d3dDevice->CreateDepthStencilView(pDepthStencil, &descDSV, &pDSV))
	{
		MessageBox(NULL, "Failed to create depth stencil view", "Error", NULL);
		return 1;
	}

	// Bind the depth stencil view
	d3dContext->OMSetRenderTargets(1,&d3dBackBuffer,pDSV);     // Depth stencil view for the render target

	return 0;
}
The code runs perfectly without error and the DX11 debugger is not reporting any problems. I am also clearing it each frame.

Geometry is drawing over itself out of order as if the depth buffer is not turned on.

I can verify in the Graphical Debugger that the geometry is correct.

Any advice on why depth isn't working correctly would be greatly appreciated.

Thanks in advance :)

Viewing all articles
Browse latest Browse all 17560

Trending Articles