2013-05-31 35 views
0

我有2个constans缓冲区,用于我的着色器,每帧一个,每个对象一个(让我们称它们为cbPerFrame和cbPerObj)。好像来自cbPerFrame缓冲区的数据没有通过像素着色器。我最近在设置常量缓冲区(使用PSSetConstantBuffers/VSSetConstantBuffers)时更改了插槽号。现在我的问题是:常量缓冲区上的插槽号

当更改常量缓冲区的槽号时,是否必须更改着色器文件中的某些内容?当在着色器文件中声明常量缓冲区时,我读了一些关于“Register”的关键字,但我从来没有真正懂过。数据应该仍然在第二个槽中,直到我覆盖它,这是什么?

很抱歉,如果这是一个基本的问题,但这些插槽编号和不断缓冲的分配混淆了我升技

回答

2

是的,你需要在你的shader什么cbuffer是什么插槽来指定。要做到这一点:

cbuffer cbPerFrame : register(b0) 
{ 
    // insert guts here 
}; 

这将注册cbPerFrame到插槽0

+0

谢谢你,如果你有2个插槽一个常数缓冲?因为我有我的cbPerObj缓冲区在2个插槽,0当我设置它与VSSetConstantBuffers和1当我设置它与PSSetConstantBuffers? (我有我的cbPerFrame插槽2,即使我首先设置它。) –

+0

在这种情况下,您需要在顶点着色器中将其注册为0,并在像素着色器中将其注册为1。 – alanw