0

我正在使用常量缓冲区将数据传输到我的像素着色器

问题是缓冲区在运行时对于 float4 成员的 x、y、z 和 w 包含着色器中的 0,而不管将哪些数据更新到缓冲区

结构定义如下:

// (C++)
struct Buffer
{
    XMMATRIX mvp_;
    XMFLOAT4 rgba_;
    int usemvp_;
};


// HLSL
cbuffer Buffer : register( b0 )
{
    matrix mvp_;
    float4 rgba_;
    int usemvp_;
};

任何帮助深表感谢

4

1 回答 1

2

您需要填充结构以使其 16 字节对齐。

// (C++)
struct Buffer
{
    XMMATRIX mvp_;
    XMFLOAT4 rgba_;
    int usemvp_;
    float padding[3];
};

此外,您必须确保将常量缓冲区设置到正确的着色器阶段,即 VSSetConstantBuffers 与 PSSetConstantBuffers。

于 2013-02-09T01:38:51.370 回答