Je souhaite utiliser le contenu d'un vecteur de D3DXMatrices dans mon shader. Comme nous connaissons les internes d'un vecteur, cela ne pose aucun problème (comme c'est juste un tableau dynamique).SetMatrix() ne copie pas toutes les valeurs dans HLSL
Maintenant, quand j'accéder à cette matrice en HLSL pour remplir un struct je reçois ce comportement étrange:
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}
Lors du débogage je vois que ma matrice est bien remplie avec les variables que je veux. Lorsque j'essaie de vérifier en mode texte ce qu'il y a dans la structure, je reçois tous les zéros, sauf le LightRange.
Comme vous pouvez le voir, j'ai essayé différentes méthodes d'accès au float4x4 mais sans aucun autre résultat.
Pourquoi oh pourquoi hlsl ne copie pas toutes mes variables?
Le mal? Toi, monsieur, j'ai fait ma journée! Je faisais juste du piratage parce que mes structures personnalisées ne fonctionnaient pas non plus. Je pense juste à envoyer des vecteurs séparément, mais c'est trop de travail. Avec un peu de chance, je peux utiliser une structure normale pour transférer mes données à hlsl au lieu de ce hack matrix. – Tili