C++ constantbuffers上的插槽编号

C++ constantbuffers上的插槽编号,c++,shader,directx-11,C++,Shader,Directx 11,我的着色器有2个constans缓冲区,每个帧一个,每个对象一个(我们称它们为cbPerFrame和cbPerObj)。似乎cbPerFrame缓冲区中的数据未通过像素着色器。我最近在设置常量缓冲区时更改了插槽编号(使用PSSetConstantBuffers/VSSetConstantBuffers)。现在我的问题是: 更改常量缓冲区的插槽编号时,是否必须更改着色器文件中的某些内容?在着色器文件中声明常量缓冲区时,我读了一些关于关键字“Register”的内容,但我从未真正了解它。在我覆盖它之

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

更改常量缓冲区的插槽编号时,是否必须更改着色器文件中的某些内容?在着色器文件中声明常量缓冲区时,我读了一些关于关键字“Register”的内容,但我从未真正了解它。在我覆盖它之前,数据应该仍然在第二个插槽中,对吗


很抱歉,如果这是一个基本问题,但插槽编号和常量缓冲区的分配让我有点困惑。

是的,您需要在着色器中指定哪个插槽中的cbuffer是什么。要执行此操作,请使用:

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

这将把cbPerFrame注册到插槽0中。

谢谢,如果两个插槽中有一个常量缓冲区,该怎么办?因为我的cbPerObj缓冲区在2个插槽中,当我使用VSSetConstantBuffers设置它时为0,当我使用PSSetConstantBuffers设置它时为1?(我的cbPerFrame在插槽2中,即使我先设置了它。顺序是否正确?)在这种情况下,您需要在顶点着色器中将其注册为0,在像素着色器中将其注册为1。