我有这个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];
};