Я получил эту структуру HLSL, и когда я передаю в буфере Материал из C ++ в HLSL, некоторые значения в моей структуре неверны. Я знаю это, потому что я пытался, например, установить излучающий цвет на Vector4 (0, 1, 0, 1) или ЗЕЛЕНЫЙ, и в моем пиксельном шейдере я возвращаю только излучающий цвет, и результат становится СИНИМ!
И когда я устанавливаю эмиссию на (1, 0, 0, 1) или КРАСНЫЙ, пиксельный шейдер выводит ЗЕЛЕНЫЙ цвет. Похоже, все смещено на 8 байт вправо. Что может быть причиной этого?
РЕДАКТИРОВАТЬ: я заметил, что мой виртуальный деструктор сделал мою структуру больше, чем обычно. Я удалил это, и тогда это работало!
HLSL структура
struct Material
{
float4 emissive;
float4 ambient;
float4 diffuse;
float4 specular;
float specularPower;
bool useTexture;
float2 padding;
};
Структура C ++
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];
};
Задача ещё не решена.