SetMatrix () не копирует все значения в HLSL - PullRequest
0 голосов
/ 30 мая 2010

Я хочу использовать содержимое вектора D3DXMatrices для моего шейдера.

m_pLightMatrices->SetMatrixArray(&currentLightMatrices[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 не копирует все мои переменные?

Ответы [ 2 ]

0 голосов
/ 30 мая 2010

Вам необходимо вызвать CommitChanges для обновления до HLSL при некоторых обстоятельствах.

Кроме того, делать это действительно своего рода зло. Вы пробовали отправлять векторы и такое отдельно?

0 голосов
/ 30 мая 2010

Мне удалось решить проблему.Мне нужно кое-что прояснить, почему это работает сейчас.

Я просто поместил функцию SetMatrixArray () до того, как настроен макет ввода, и вдруг он отлично работает.

Ранее это было внутри функции обновлениявместе со всеми другими переменными (такими как мировые матрицы и т. д.), и они работают нормально.

...