2010-05-29 12 views
0

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?

Répondre

0

J'ai réussi à résoudre le problème. J'ai besoin de quelques éclaircissements sur la raison pour laquelle cela fonctionne maintenant.

Je viens de mettre la fonction SetMatrixArray() avant que la mise en page d'entrée est définie et tout à coup cela fonctionne parfaitement.

Auparavant, il était à l'intérieur d'une fonction de mise à jour avec toutes les autres variables (comme les matrices du monde, etc.) et ceux qui fonctionnent bien.

0

Vous devez appeler CommitChanges afin de mettre à jour HLSL dans certaines circonstances.

De plus, faire cela est vraiment une sorte de mal. Avez-vous essayé d'envoyer les vecteurs et autres séparément?

+0

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