Я хочу использовать содержимое вектора D3DXMatrices для моего шейдера.
m_pLightMatrices->SetMatrixArray(¤tLightMatrices[0].m[0][0],0,numLights);
Как мы знаем внутренности вектора, это не создает проблем (так как это просто динамический массив).
Теперь, когда я обращаюсь к этой матрице в hlsl для заполнения структуры, я получаю странное поведение:
struct LightTest
{
float3 LightPos;
float LightRange;
float4 LightDiffuse;
float3 LightAtt;
};
float4x4 currentLight = gLights[0];
LightTest lt;
lt.LightPos = currentLight._m00_m01_m02; //{0,0,0}
lt.LightDiffuse = currentLight[1].rgba; //{0,0,0,0}
lt.LightRange = currentLight._m03; //this gives me a value
lt.LightAtt = currentLight[2].xyz; //{0,0,0}
Во время отладки я вижу, что моя матрица хорошо заполнена переменными, которые я хочу.
Когда я пытаюсь жестко проверить, что находится в структуре, я получаю все нули, кроме LightRange.
Как видите, я пробовал разные способы доступа к float4x4, но без каких-либо других результатов.
Почему hlsl не копирует все мои переменные?