阅读本书:“使用Direct3D 11进行实际渲染和计算”,并在线寻找定义:https://docs.microsoft.com/en-us/windows/uwp/graphics-concepts/shader-resource-view--srv-
我仍然对ID3D11ShaderResourceView是什么感到困惑。
请记住,我正在学习DirectX 11来制作视频游戏。考虑到这一点......
什么是着色器资源视图?在什么情况下你会使用着色器资源视图?最重要的是,您如何使用着色器资源视图?
我假设您可以在HLSL代码中使用此资源,但在本书中我还没有看到如何执行此操作的示例,以及它用于视频游戏引擎的通用方式。
谢谢!
答案 0 :(得分:2)
在较旧版本(如Direct3D 9)中,您拥有单个接口,例如IDirect3DTexture9
,IDirect3DCubeTexture9
或IDirect3DVolumeTexture9
,它们封装了图像位本身和预期的使用语义。这有一个特殊的逻辑,使它也可以作为渲染目标。
在Direct3D 10中,这被分为两个部分:
资源(即图片位),例如ID3DxxTexture1D
,ID3DxxTexture2D
和ID3DxxTexture3D
用法的语义,是ID3DxxShaderResourceView
,用于读取着色器中的纹理 - 或 - ID3D10RenderTargetView
,用于渲染纹理。
较新设计的优点是,您可以拥有一个ID3DxxTexture2D
资源,并在使用它时使用SRV进行渲染,并在使用它作为渲染纹理时使用RTV。您可以将立方体贴图视为数组大小为6的2D纹理。
您可能会发现MSDN上的旧文档很有帮助。
答案 1 :(得分:0)
所以现实生活中的例子就是阴影 - 基本上你是从灯光位置填充深度缓冲区,然后从相机位置浏览几何体并使用深度缓冲区中的数据来计算像素是否处于阴影中。所以* DirectX中的View可以被翻译成"将此资源视为"。在第一部分中,您将使用Texture作为DepthStencilView("将此纹理视为Depth Stencil"),在下一部分中,您将使用相同的纹理作为着色器的输入(ShaderResourceView,&#34) ;将此纹理视为着色器资源)。
这"过渡"在资源同步方面非常重要。在DX11中,这是由驱动程序在DX12中为您完成的,但是您必须处理此问题。