Oui ok je vois ce que tu voulais dire mais il ya d'autres moyens pour changer la valeur d'une des propriétés de la structure...dans mons cas, je fais
cgGetNamedParameter(myCgFragmentProgram, "lights[0].property" ) pour changer celle de la lumière n°0. Ca marche parfaitement avec un tableau fixe.
Seulement voilà ce que j'ai maintenant:
Code :
- myCgFragmentParam_lightsArray = cgGetNamedParameter(myCgFragmentProgram, "lights" );
- cgSetArraySize(myCgFragmentParam_lightsArray,1);
- assert ( cgGetArraySize(myCgFragmentParam_lightsArray,0)==1 ); // ok
- myCgFragmentParam_lightDiffuse = cgGetNamedParameter(myCgFragmentProgram, "lights[0].diffuse" );
- checkForCgError("could not get 'light.diffuse' parameter" ); // ok
- float lightDiffuse[3] = { 0.95f, 0.95f, 0.95f };
- cgSetParameter3fv(myCgFragmentParam_lightDiffuse, lightDiffuse);
- // ...pareil pour les autres propriétés de la lumière
- float test[3];
- cgGetParameterValuefc ( myCgFragmentParam_lightDiffuse, 3, test);
|
Résultat, en débug j'ai bien test = { 0.95f, 0.95f, 0.95f };
Donc tout est ok : le tableau est bien redimensionné, les valeurs passées sont correctes; et pourtant ma scène est quasi noire à l'affichage, preuve que le shader n'entre pas dans la boucle...étrange non?
Pour info, j'ai une Radeon X1950 Pro, qui bizarrement ne semble supporter que le profil CG_PROFILE_ARBFP1...Est-ce qu'elle ne supporterait pas cette technique?
Message édité par akalash47 le 31-05-2007 à 14:23:16