常量缓冲区接收错误的值

时间:2014-12-22 22:13:36

标签: c++ hlsl fragment-shader packing

我有这个HLSL结构,当我将一个Material缓冲区从C ++传递给HLSL时,我的struct中的一些值是错误的。我知道这是因为我试图将发光颜色设置为Vector4(0,1,0,1)或绿色,并且在我的像素着色器中,我只返回发光颜色,结果变为蓝色! 当我将发光设置为(1,0,0,1)或RED时,像素着色器输出绿色。所以似乎所有东西都向右移动了8个字节。这背后可能是什么原因?

编辑:我注意到我的虚拟析构函数使我的结构比平常更大。我删除了它然后它工作了!

HLSL结构

struct Material
{
    float4 emissive;
    float4 ambient;
    float4 diffuse;
    float4 specular;
    float specularPower;
    bool useTexture;
    float2 padding;
};

C ++ struct

class Material
{
    virtual ~Material(); // - I removed this!
    helium::Vector4 m_emissive;
    helium::Vector4 m_ambient;
    helium::Vector4 m_diffuse;
    helium::Vector4 m_specular;
    float m_specularPower;
    int m_useTexture;
    float m_padding[2];
};

0 个答案:

没有答案