这段代码出现在windows phone 8默认direct3d项目创建的一个Direct3DBase类的编写中:
// Create a depth stencil view.
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
);
ComPtr<ID3D11Texture2D> depthStencil;
DX::ThrowIfFailed(
m_d3dDevice->CreateTexture2D(
&depthStencilDesc,
nullptr,
&depthStencil
)
);
CD3D11_DEPTH_STENCIL_VIEW_DESC depthStencilViewDesc(D3D11_DSV_DIMENSION_TEXTURE2D);
DX::ThrowIfFailed(
m_d3dDevice->CreateDepthStencilView(
depthStencil.Get(),
&depthStencilViewDesc,
&m_depthStencilView
)
);
什么是深度模板 View ?
最佳答案
D3D11 将资源(本质上只是内存块)和 View (从图形管道的不同部分“查看”或访问这些内存块的方式)的概念分开。在此示例中,资源是具有所需宽度、高度和格式的 2D 纹理, View 是该纹理的深度模板 View 。
当您想要渲染某些东西时,您可以通过调用 ID3D11DeviceContext::OMSetRenderTargets() 将渲染目标 View 和深度模板 View 绑定(bind)到管道。从而将指定 View 的支持资源绑定(bind)为渲染目标和深度/模板缓冲区。
只有当你想做更复杂的事情时,这种解耦的优势才会真正显现出来,比如将纹理数组的切片绑定(bind)为渲染目标或深度模板缓冲区,在帧的不同阶段以不同的方式重新解释相同的资源内存,等等。与 D3D9 相比,它还使使用渲染目标或深度模板缓冲区作为纹理的相当常见的情况变得更简单,也不再是特殊情况。
关于c++ - 什么是深度模板 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20106440/