什么是深度模具视图

What is a depth stencil view

本文关键字:视图 深度 什么      更新时间:2023-10-16

此代码出现在由默认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
        )
    );

什么是深度模具视图?

D3D11分离了资源(本质上只是内存块)和视图(从图形管道的不同部分"查看"或访问这些内存块的方法)的概念。在本例中,资源是所需宽度、高度和格式的2D纹理,视图是该纹理上的深度模具视图。

如果要渲染某个内容,可以通过调用ID3D11DeviceContext::OMSetRenderTarget()将渲染目标视图和深度模具视图绑定到管道,从而将指定视图的后台资源绑定为渲染目标和深度/模具缓冲区。

只有当你想做更复杂的事情,比如将纹理数组的切片绑定为渲染目标或深度模具缓冲区时,在帧的不同阶段以不同的方式重新解释相同的资源内存时,这种解耦的优势才会真正显现出来。它还使使用渲染目标或深度模板缓冲区作为纹理的常见情况比D3D9中的情况更简单,也不那么特殊。