c++ - 什么是深度模板 View

标签 c++ direct3d

这段代码出现在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/

相关文章:

c++ - 正确测量像素中的字符

c++ - 在 C++ 中推断函数或仿函数的返回类型

c++ - 对 `USER_ERROR__inconsistent_build_configuration__see_dlib_faq_1_' 的 undefined reference

c++ - XCode 助理编辑器不显示我的 .h 和相关的 .cpp 文件

c# - Convert.ToDecimal 在加载 DirectX/Direct3D 时给出不同的结果

c++ - 编译器不允许我使用 "DDSTextureLoader.h"和 "WICTextureLoader.h"

windows - 触发 Windows UAC 提示时是否有 WinAPI 消息?

c++ - Objective-C/C++ - 链接器错误/方法签名问题

c++ - 如何处理 Direct3D11 中的后备缓冲区?

c++ - D3D 线绘制分成三角形 - 它几乎可以工作,但需要提示