Jump to content

  • Log In with Google      Sign In   
  • Create Account

RudiMedia

Member Since 23 Aug 2011
Offline Last Active Mar 19 2013 11:51 AM

Topics I've Started

Windows Phone 8 Depth Buffer access

20 February 2013 - 10:39 AM

Just a quick question,

is it possible to bind the depth buffer to a shader resource view with FEATURE_LEVEL_9_3?

 

Because I constantly get an error, if I use both D3D11_BIND_DEPTH_STENCIL and D3D11_BIND_SHADER_RESOURCE as flags.

CD3D11_TEXTURE2D_DESC depthStencilDesc(DXGI_FORMAT_D24_UNORM_S8_UINT, static_cast<UINT>(m_renderTargetSize.Width),
		static_cast<UINT>(m_renderTargetSize.Height), 1, 1, D3D11_BIND_DEPTH_STENCIL | D3D11_BIND_SHADER_RESOURCE);

ComPtr<ID3D11Texture2D> depthStencil;
DX::ThrowIfFailed(m_d3dDevice->CreateTexture2D(&depthStencilDesc, nullptr, &depthStencil));

 

//Edit: Found my mistake, the format has to be DXGI_FORMAT_R24G8_TYPELESS


DirectX11 Depth Buffer Problem (solved)

29 April 2012 - 03:57 PM

Hello everyone,
I have this problem with my depth buffer and all the solutions from the countless other threads with this problem do not seem to work for me.

Posted Image

I use the same code as shown here: http://www.rastertek.../dx11tut03.html

Global Variables:
extern ID3D11Device* pDevice;
extern ID3D11DeviceContext* pDevCon;
extern ID3D11RenderTargetView* pRenderTargetView;
extern ID3D11DepthStencilState* pDepthStencilState;
extern ID3D11DepthStencilView* pDepthStencilView;
extern ID3D11Texture2D* pDepthStencilBuffer;
extern ID3D11RasterizerState* pRasterState;

Direct3D initialisation:
HRESULT result;

D3D11_TEXTURE2D_DESC depthBufferDesc;
depthBufferDesc.Width	 = Width;
depthBufferDesc.Height	= Height;
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;
depthBufferDesc.CPUAccessFlags = 0;
depthBufferDesc.MiscFlags	  = 0;

result = pDevice->CreateTexture2D(&depthBufferDesc, NULL, &pDepthStencilBuffer);

if(FAILED(result))
{
  MessageBox(NULL, L"Error1", L"Error", MB_OK | MB_ICONERROR);
}

D3D11_DEPTH_STENCIL_DESC depthStencilDesc;
ZeroMemory(&depthStencilDesc, sizeof(D3D11_DEPTH_STENCIL_DESC));
// Depth test parameters
depthStencilDesc.DepthEnable = true;
depthStencilDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;
depthStencilDesc.DepthFunc = D3D11_COMPARISON_LESS;
// Stencil test parameters
depthStencilDesc.StencilEnable = true;
depthStencilDesc.StencilReadMask = 0xFF;
depthStencilDesc.StencilWriteMask = 0xFF;
// Stencil operations if pixel is front-facing
depthStencilDesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_INCR;
depthStencilDesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
// Stencil operations if pixel is back-facing.
depthStencilDesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_DECR;
depthStencilDesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS;

result = pDevice->CreateDepthStencilState(&depthStencilDesc, &pDepthStencilState);
pDevCon->OMSetDepthStencilState(pDepthStencilState, 1);

if(FAILED(result))
{
  MessageBox(NULL, L"Error2", L"Error", MB_OK | MB_ICONERROR);
}

D3D11_DEPTH_STENCIL_VIEW_DESC depthStencilViewDesc;
ZeroMemory(&depthStencilViewDesc, sizeof(D3D11_DEPTH_STENCIL_VIEW_DESC));
depthStencilViewDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
depthStencilViewDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;
depthStencilViewDesc.Texture2D.MipSlice = 0;
result = pDevice->CreateDepthStencilView(pDepthStencilBuffer, &depthStencilViewDesc, &pDepthStencilView);
pDevCon->OMSetRenderTargets(1, &pRenderTargetView, pDepthStencilView);

if(FAILED(result))
{
  MessageBox(NULL, L"Error3", L"Error", MB_OK | MB_ICONERROR);
}

D3D11_RASTERIZER_DESC rasterDesc;
rasterDesc.AntialiasedLineEnable = false;
rasterDesc.CullMode = D3D11_CULL_BACK;
rasterDesc.DepthBias = 0;
rasterDesc.DepthBiasClamp = 0.0f;
rasterDesc.DepthClipEnable = true;
rasterDesc.FillMode = D3D11_FILL_SOLID;
rasterDesc.FrontCounterClockwise = false;
rasterDesc.MultisampleEnable = false;
rasterDesc.ScissorEnable = false;
rasterDesc.SlopeScaledDepthBias = 0.0f;

result = pDevice->CreateRasterizerState(&rasterDesc, &pRasterState);
pDevCon->RSSetState(pRasterState);

if(FAILED(result))
{
  MessageBox(NULL, L"Error4", L"Error", MB_OK | MB_ICONERROR);
}

D3D11_VIEWPORT viewport;
ZeroMemory(&viewport, sizeof(D3D11_VIEWPORT));
viewport.TopLeftX = 0;
viewport.TopLeftY = 0;
viewport.Width = Width;
viewport.Height = Height;
viewport.MinDepth = 0.0f;
viewport.MaxDepth = 1.0f;

pDevCon->RSSetViewports(1, &viewport);

Camera Code:
m_pV3Pos = &Position;
m_pV3LookAt = &LookAt;
m_pV3View = (D3DXVECTOR3*)malloc(sizeof(D3DXVECTOR3));
m_pV3Up = (D3DXVECTOR3*)malloc(sizeof(D3DXVECTOR3));
*m_pV3View = *m_pV3Pos - *m_pV3LookAt;
D3DXVec3Normalize(m_pV3View, m_pV3View);
D3DXVec3Cross(m_pV3Up, &D3DXVECTOR3(0,1,0), m_pV3View);
D3DXVec3Cross(m_pV3Up, m_pV3View, m_pV3Up);
m_pMatView = (D3DXMATRIX*)malloc(sizeof(D3DXMATRIX));
m_pMatProj = (D3DXMATRIX*)malloc(sizeof(D3DXMATRIX));

D3DXVec3Normalize(m_pV3Up, m_pV3Up);
D3DXMatrixLookAtLH(m_pMatView, m_pV3Pos, m_pV3LookAt, m_pV3Up);
D3DXMatrixPerspectiveFovLH(m_pMatProj, FOV, (float)Width/Height, 1.0f, 1000.0f);

Draw Code:
D3DXCOLOR bgColor( 0, 0.2f, 0.4f, 1.0f );
pDevCon->ClearRenderTargetView(pRenderTargetView, bgColor);
pDevCon->ClearDepthStencilView(pDepthStencilView, D3D11_CLEAR_DEPTH|D3D11_CLEAR_STENCIL, 1.0f, 0);
model->Draw();
pSwapChain->Present(0, 0);

I realy have no ideas left so if anyone could help me with this issue I would be most grateful Posted Image

PARTNERS