0

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

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

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

4

1 回答 1

2

是的,您需要在着色器中指定 cbuffer 在哪个插槽中。为此,请使用:

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

这会将 cbPerFrame 注册到插槽 0。

于 2013-05-31T11:58:12.010 回答