【问题标题】:Slot numbers on constantbuffers常量缓冲区上的插槽号
【发布时间】:2013-05-31 19:58:12
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ shader directx-11


    【解决方案1】:

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

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

    这会将 cbPerFrame 注册到 slot 0。

    【讨论】:

    • 谢谢,如果您在 2 个插槽中有一个常量缓冲区怎么办?因为我在 2 个插槽中有我的 cbPerObj 缓冲区,当我使用 VSSetConstantBuffers 设置它时为 0,当我使用 PSSetConstantBuffers 设置它时为 1? (我的 cbPerFrame 在插槽 2 中,即使我先设置它。顺序应该是正确的吗?)
    • 在这种情况下,您需要在顶点着色器中将其注册为 0,在像素着色器中注册为 1。
    猜你喜欢
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多