2d rendering
This commit is contained in:
@@ -14,6 +14,7 @@ D3DClass::D3DClass()
|
||||
m_depthStencilState = 0;
|
||||
m_depthStencilView = 0;
|
||||
m_rasterState = 0;
|
||||
m_depthDisabledStencilState = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -46,7 +47,7 @@ bool D3DClass::Initialize(int screenWidth, int screenHeight, bool vsync, HWND hw
|
||||
D3D11_DEPTH_STENCIL_VIEW_DESC depthStencilViewDesc;
|
||||
D3D11_RASTERIZER_DESC rasterDesc;
|
||||
float fieldOfView, screenAspect;
|
||||
|
||||
D3D11_DEPTH_STENCIL_DESC depthDisabledStencilDesc;
|
||||
|
||||
// Store the vsync setting.
|
||||
m_vsync_enabled = vsync;
|
||||
@@ -345,6 +346,34 @@ bool D3DClass::Initialize(int screenWidth, int screenHeight, bool vsync, HWND hw
|
||||
// Create an orthographic projection matrix for 2D rendering.
|
||||
m_orthoMatrix = XMMatrixOrthographicLH((float)screenWidth, (float)screenHeight, screenNear, screenDepth);
|
||||
|
||||
// Clear the second depth stencil state before setting the parameters.
|
||||
ZeroMemory(&depthDisabledStencilDesc, sizeof(depthDisabledStencilDesc));
|
||||
|
||||
// Now create a second depth stencil state which turns off the Z buffer for 2D rendering. The only difference is
|
||||
// that DepthEnable is set to false, all other parameters are the same as the other depth stencil state.
|
||||
depthDisabledStencilDesc.DepthEnable = false;
|
||||
depthDisabledStencilDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;
|
||||
depthDisabledStencilDesc.DepthFunc = D3D11_COMPARISON_LESS;
|
||||
depthDisabledStencilDesc.StencilEnable = true;
|
||||
depthDisabledStencilDesc.StencilReadMask = 0xFF;
|
||||
depthDisabledStencilDesc.StencilWriteMask = 0xFF;
|
||||
depthDisabledStencilDesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
|
||||
depthDisabledStencilDesc.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_INCR;
|
||||
depthDisabledStencilDesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
|
||||
depthDisabledStencilDesc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
|
||||
depthDisabledStencilDesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
|
||||
depthDisabledStencilDesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_DECR;
|
||||
depthDisabledStencilDesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
|
||||
depthDisabledStencilDesc.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
|
||||
|
||||
// Create the state using the device.
|
||||
result = m_device->CreateDepthStencilState(&depthDisabledStencilDesc, &m_depthDisabledStencilState);
|
||||
if (FAILED(result))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -357,6 +386,12 @@ void D3DClass::Shutdown()
|
||||
m_swapChain->SetFullscreenState(false, NULL);
|
||||
}
|
||||
|
||||
if (m_depthDisabledStencilState)
|
||||
{
|
||||
m_depthDisabledStencilState->Release();
|
||||
m_depthDisabledStencilState = 0;
|
||||
}
|
||||
|
||||
if (m_rasterState)
|
||||
{
|
||||
m_rasterState->Release();
|
||||
@@ -503,5 +538,18 @@ void D3DClass::ResetViewport()
|
||||
// Set the viewport.
|
||||
m_deviceContext->RSSetViewports(1, &m_viewport);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void D3DClass::TurnZBufferOn()
|
||||
{
|
||||
m_deviceContext->OMSetDepthStencilState(m_depthStencilState, 1);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void D3DClass::TurnZBufferOff()
|
||||
{
|
||||
m_deviceContext->OMSetDepthStencilState(m_depthDisabledStencilState, 1);
|
||||
return;
|
||||
}
|
||||
Reference in New Issue
Block a user