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

4

阅读书籍: "Practical Rendering and Computation with Direct3D 11",并在网上查找定义:https://learn.microsoft.com/en-us/windows/uwp/graphics-concepts/shader-resource-view--srv-

我仍然困惑于ID3D11ShaderResourceView是什么。

请记住,我正在学习DirectX 11以创建视频游戏。考虑到这一点...

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

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

谢谢!

2个回答

8
在旧版本(例如Direct3D 9)中,您只有一个接口,例如IDirect3DTexture9IDirect3DCubeTexture9IDirect3DVolumeTexture9,它将图像位和预期的用法语义封装在一起。这种方法有特殊的逻辑,使其也能作为渲染目标工作。
在Direct3D 10中,这被拆分为两个元素:
- 资源(即图像位),如ID3DxxTexture1DID3DxxTexture2DID3DxxTexture3D - 用法语义,其可以是ID3DxxShaderResourceView(用于在着色器中读取纹理)或ID3DxxRenderTargetView(用于将内容渲染到纹理上)。还有一个用于与DirectCompute一起使用的ID3D11UnorderedAccessView 较新设计的优点是,在渲染时,您可以拥有单个ID3DxxTexture2D资源,并使用SRV,在将其用作渲染纹理时使用RTV。您可以将立方体贴图视为数组大小为6的2D纹理。
您可能会发现在Microsoft Docs上的旧文档是有帮助的。

您应该查看DirectX Tool Kit教程


好的!为了在着色器中实际使用纹理,您必须拥有一个ShaderResourceView。 - Mike5050
你必须拥有一个SRV来将资源绑定到用于读取的着色器上。你必须拥有一个RTV来将资源绑定到渲染管道输出上。 - Chuck Walbourn
谢谢!现在更有意义了! - Mike5050

4
所以一个实际的例子就是阴影 - 基本上你从光源的位置通过几何形状填充深度缓冲区,然后从摄像机的位置通过几何形状,并使用深度缓冲区的数据计算像素是否在阴影中。因此,在DirectX中,“View”可以被翻译为“将此资源视为”。在第一部分中,您将使用纹理作为深度模板视图(“将此纹理视为深度模板”),在下一部分中,您将使用相同的纹理作为着色器的输入(着色器资源视图,“将此纹理视为着色器资源”)。
这种“转换”在资源同步方面非常重要。在DX11中,驱动程序会为您完成此操作,但在DX12中,您必须自己处理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接