我正在使用Nvidia CG
和Direct3D9
並且有關於下面的代碼的問題。C++着色器問題
它會編譯,但不會「加載」(使用cgLoadProgram
包裝),並將產生的故障簡單描述爲D3D failure happened
。
它的Shader Model編譯像素着色器的一部分設定爲3.0
什麼可能是有趣的是,這種着色器加載在下列情況下罰款:
1)手動展開while語句(對許多if { }
語句)。
2)刪除循環中tex2D
函數的行。
3)切換到着色器模型2_X
並手動展開循環。着色器代碼的
問題的一部分:
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);
}
如果有人知道爲什麼會發生這種情況或會在非CG環境中測試similiar代碼或能幫助我在一些其他的方式,我在等你;)
謝謝。