代码之家  ›  专栏  ›  技术社区  ›  Mike5050

DirectX 11什么是着色器资源视图

  •  3
  • Mike5050  · 技术社区  · 8 年前

    阅读《使用Direct3D 11进行实际渲染和计算》一书,并在线查找定义: https://docs.microsoft.com/en-us/windows/uwp/graphics-concepts/shader-resource-view--srv-

    我仍然对ID3D11ShaderResourceView是什么感到困惑。

    什么是着色器资源视图?在什么情况下,您会使用着色器资源视图?最重要的是,如何使用着色器资源视图?

    我假设您可以在HLSL代码中使用此资源,但在这本书中,我还没有看到如何做到这一点的示例,以及它以何种通用方式用于视频游戏引擎。

    2 回复  |  直到 8 年前
        1
  •  7
  •   Chuck Walbourn    4 年前

    在旧版本(如Direct3D 9)中,您可以使用单一界面,如 IDirect3DTexture9 IDirect3DCubeTexture9 IDirect3DVolumeTexture9 它封装了图像位本身和预期的使用语义。这具有特殊的逻辑,使其也可以作为渲染目标。

    在Direct3D 10中,这被分为两个元素:

    • ID3DxxTexture1D , ID3DxxTexture2D ID3DxxTexture3D

    • ID3DxxShaderResourceView 用于读取着色器中的纹理-或- ID3DxxRenderTargetView ID3D11UnorderedAccessView 用于使用DirectCompute。

    ID3DxxTexture2D 资源,并在使用它进行渲染时具有SRV,在将其用作渲染纹理时具有RTV。可以将立方体贴图视为阵列大小为6的2D纹理。

    您可以在上找到较旧的文档 Microsoft Docs 有用的

    DirectX Tool Kit tutorials

        2
  •  3
  •   Bartosz Boczula    8 年前

    因此,现实生活中的例子是阴影-基本上,你从灯光位置填充深度缓冲区来遍历几何体,然后从相机位置遍历几何体,并使用深度缓冲区中的数据来计算像素是否在阴影中。因此,DirectX中的*视图可以翻译为“将此资源视为”。在第一部分中,您将使用纹理作为深度模具视图(“将此纹理视为深度模具”),在下一部分中,您将使用相同的纹理作为着色器的输入(ShaderResourceView,“将此纹理视为着色器资源”)。

    这种“过渡”在资源同步方面非常重要。在DX11中,这是由驱动程序为您完成的,但在DX12中,您必须注意这一点。