D3D10常量缓冲区无法正常工作

时间:2013-02-08 22:03:45

标签: c++ directx buffer hlsl direct3d11

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

问题是缓冲区在运行期间对于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_;
};

非常感谢任何帮助

1 个答案:

答案 0 :(得分:2)

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

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

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