DirectX 11 什么是着色器资源视图
DirectX 11 What Is A Shader Resource View
看书:"Practical Rendering and Computation with Direct3D 11",网上找定义:https://docs.microsoft.com/en-us/windows/uwp/graphics-concepts/shader-resource-view--srv-
我仍然对什么是 ID3D11ShaderResourceView 感到困惑。
请记住,我正在学习 DirectX 11 来创建视频游戏。考虑到这一点......
什么是着色器资源视图?在什么情况下您会使用着色器资源视图?最重要的是,您如何使用着色器资源视图?
我假设您可以在 HLSL 代码中使用此资源,但在本书中我还没有看到有关如何执行此操作的示例,以及它以何种通用方式用于视频游戏引擎。
谢谢!
在 Direct3D 9 等旧版本中,您只有一个接口,例如 IDirect3DTexture9
、IDirect3DCubeTexture9
或 IDirect3DVolumeTexture9
,它封装了图像位本身和预期的使用语义.这有特殊的逻辑使其也可以作为渲染目标。
在 Direct3D 10 中,它被分成两个元素:
像 ID3DxxTexture1D
、ID3DxxTexture2D
和 ID3DxxTexture3D
这样的资源(即图像位)
用法的语义是 ID3DxxShaderResourceView
用于在着色器中读取纹理 - 或者 - ID3DxxRenderTargetView
用于渲染纹理。还有一个 ID3D11UnorderedAccessView
用于与 DirectCompute 一起工作。
较新设计的优点是您可以拥有一个 ID3DxxTexture2D
资源并在使用它进行渲染时拥有一个 SRV,在将其用作渲染纹理时拥有一个 RTV。您可以将立方体贴图视为数组大小为 6 的 2D 纹理。
您可能会发现有关 Microsoft Docs 的旧文档很有帮助。
You should take a look at the DirectX Tool Kit tutorials
所以现实生活中的例子是阴影 - 基本上你从灯光位置通过你的几何体填充深度缓冲区,然后从相机位置通过几何体并使用深度缓冲区中的数据来计算像素是否在阴影中或不是。所以 *View in DirectX 可以翻译成 "treat this resource as"。在第一部分中,您将使用纹理作为 DepthStencilView ("treat this texture as Depth Stencil"),在下一部分中,您将使用相同的纹理作为着色器的输入(ShaderResourceView,“将此纹理视为着色器资源”。
这个"transition"在资源同步方面非常重要。在 DX11 中,这是由驱动程序为您完成的,在 DX12 中,您必须自己处理。
看书:"Practical Rendering and Computation with Direct3D 11",网上找定义:https://docs.microsoft.com/en-us/windows/uwp/graphics-concepts/shader-resource-view--srv-
我仍然对什么是 ID3D11ShaderResourceView 感到困惑。
请记住,我正在学习 DirectX 11 来创建视频游戏。考虑到这一点......
什么是着色器资源视图?在什么情况下您会使用着色器资源视图?最重要的是,您如何使用着色器资源视图?
我假设您可以在 HLSL 代码中使用此资源,但在本书中我还没有看到有关如何执行此操作的示例,以及它以何种通用方式用于视频游戏引擎。
谢谢!
在 Direct3D 9 等旧版本中,您只有一个接口,例如 IDirect3DTexture9
、IDirect3DCubeTexture9
或 IDirect3DVolumeTexture9
,它封装了图像位本身和预期的使用语义.这有特殊的逻辑使其也可以作为渲染目标。
在 Direct3D 10 中,它被分成两个元素:
像
这样的资源(即图像位)ID3DxxTexture1D
、ID3DxxTexture2D
和ID3DxxTexture3D
用法的语义是
ID3DxxShaderResourceView
用于在着色器中读取纹理 - 或者 -ID3DxxRenderTargetView
用于渲染纹理。还有一个ID3D11UnorderedAccessView
用于与 DirectCompute 一起工作。
较新设计的优点是您可以拥有一个 ID3DxxTexture2D
资源并在使用它进行渲染时拥有一个 SRV,在将其用作渲染纹理时拥有一个 RTV。您可以将立方体贴图视为数组大小为 6 的 2D 纹理。
您可能会发现有关 Microsoft Docs 的旧文档很有帮助。
You should take a look at the DirectX Tool Kit tutorials
所以现实生活中的例子是阴影 - 基本上你从灯光位置通过你的几何体填充深度缓冲区,然后从相机位置通过几何体并使用深度缓冲区中的数据来计算像素是否在阴影中或不是。所以 *View in DirectX 可以翻译成 "treat this resource as"。在第一部分中,您将使用纹理作为 DepthStencilView ("treat this texture as Depth Stencil"),在下一部分中,您将使用相同的纹理作为着色器的输入(ShaderResourceView,“将此纹理视为着色器资源”。
这个"transition"在资源同步方面非常重要。在 DX11 中,这是由驱动程序为您完成的,在 DX12 中,您必须自己处理。