J'utilise Nvidia CG
et Direct3D9
et vous avez la question concernant le code suivant.C++ shader question
Il compile, mais ne "charge" pas (en utilisant l'enveloppe cgLoadProgram
) et la défaillance qui en résulte est décrite simplement comme D3D failure happened
.
Il est une partie du pixel shader compilé avec le modèle de shaders mis à 3.0
Ce qui peut être intéressant est que cette charge de shaders fines dans les cas suivants:
1) manuellement déroulement de l'instruction while (à plusieurs instructions if { }
).
2) Retrait de la ligne avec la fonction tex2D
dans la boucle.
3) Passer au modèle de nuanceur 2_X
et dérouler manuellement la boucle.
partie du problème du code de shaders:
float2 tex = float2(1, 1);
float2 dtex = float2(0.01, 0.01);
float h = 1.0 - tex2D(height_texture1, tex);
float height = 1.00;
while (h < height)
{
height -= 0.1;
tex += dtex;
// Remove the next line and it works (not as expected,
// of course)
h = tex2D(height_texture1, tex);
}
Si quelqu'un sait pourquoi cela peut se produire ou pourrait tester le code similaire dans un environnement non-CG ou pourrait me aider d'une autre manière, Je vous attends;)
Merci.