Hi Guys,
I am having trouble with my depth buffer in my project.
I am creating it as follows;
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
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
