DirectX 11着色器资源管理

时间:2014-08-28 02:13:57

标签: c++ resources directx shader directx-11

我正在创建着色器管理系统,而不是使用Effects 11库。关于着色器的资源管理,我有几个问题。

如果我在着色器代码中将常量缓冲区设置为某个寄存器,那么当我在设备上设置它时是否需要将其设置为该寄存器?如果我有多个使用该寄存器的着色器怎么办?

在绘制之间是否在内存中保留了常量缓冲区,还是它们被清除了?比方说,我有一个不会从最后一次抽奖改变的常量缓冲区,我是否需要重新设置?

一次设置一个常量缓冲区或一次设置所有缓冲区是否较慢?

提前致谢。

1 个答案:

答案 0 :(得分:2)

是的,您需要设置该寄存器,将其视为一个常量缓冲区。

是的,它会保留在那里,直到你用另一个切换它。

“一次设置一个常量缓冲区或一次设置所有缓冲区是否较慢?”

“一下子”是什么意思?

无论如何,请查看此nvidia演示文稿,了解有关cbuffer管理的详细信息: https://developer.nvidia.com/sites/default/files/akamai/gamedev/files/gdc12/Efficient_Buffer_Management_McDonald.pdf

请注意,如果在hlsl代码上使用完全相同的“变量”,则像素着色器和顶点着色器(不同着色器类型)使用不同的寄存器。这是为你处理的,要注意的是要将cbuffer更新到寄存器,你使用像素着色器版本的d3d函数(VSSetConstantBuffer vs PSSetConstantBuffer等)。那当然是所有类型的着色器。

所以例如,在hlsl代码中,你可以使用相同的槽(寄存器)有2个常量缓冲区,但是,记住不要在同一个着色器上使用它们。或者,再次,你可以使用相同的常量缓冲区在两个着色器上,只要记住它不一样。