2015-05-11 38 views
1

我試圖在Direct3D 11中實現深度緩衝區,但事實證明,這並不像打架那麼容易。這裏是我的問題:每當我調用這個函數:Direct3D 11深度緩衝區導致黑屏

m_DeviceContext->OMSetRenderTargets(1, &m_RTV, m_DepthStencilView); 

隨着我的深入模板視圖中的第三個參數,我什麼也看不到我的窗口;一切都是黑色的。如果我放置nullptr,那麼我的所有幾何圖形都不經過任何深度測試(就像在我嘗試實現深度之前)。下面是我如何創建我的深度緩衝和我深度模具觀點:

D3D11_TEXTURE2D_DESC depthBufferDesc; 
ZeroMemory(&depthBufferDesc, sizeof(D3D11_TEXTURE2D_DESC)); 
depthBufferDesc.Width = iwidth; 
depthBufferDesc.Height = iheight; 
depthBufferDesc.MipLevels = 1; 
depthBufferDesc.ArraySize = 1; 
depthBufferDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; 
depthBufferDesc.SampleDesc.Count = 1; 
depthBufferDesc.SampleDesc.Quality = 0; 
depthBufferDesc.Usage = D3D11_USAGE_DEFAULT; 
depthBufferDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL; 

hr = m_Device->CreateTexture2D(&depthBufferDesc, nullptr, &m_DepthStencilBuffer); 

hr = m_Device->CreateDepthStencilView(m_DepthStencilBuffer, nullptr, &m_DepthStencilView); 

我搜索了很長一段時間來找到解決方案,但我沒有幫助我。我也檢查了視口,但它不起作用。我還清理每一幀的視圖。

你能幫我一下嗎?我會感激它:)謝謝。

+0

通常情況下,默認的深度模板狀態應該少一些讀寫,這應該符合您的使用案例。也許嘗試啓用調試設備,看看你是否有任何運行時警告/錯誤 – catflier

回答

0

在嘗試使用它之前,您可能忘記了將深度緩衝區清除爲1.0。

+0

我沒有代碼了,但我相信我沒有忘記這樣做。 – ThePatchou