iOS向けにもう1つのGPUマンデルブローレンダラーを作成していますが、フラグメントシェーダで予期しない結果が発生しています。OpenGL ES 2.0で最適化されたコードiOSのフラグメントシェーダ
私は独立してその値をテストする場合、私は2つの制服を持っている、と。その後、
if (u_h0 == 0.00130208337) {
return 200.; // this line is executed
}
上述のコメント、および:
if (u_h1 == -0.0000000000388051084) {
return 100.; // this line is executed
}
を、私はこれらが有効なテストです願っています。今、私は関数を呼び出す:
vec2 e_ty = ds_mul(vec2(1., 0.), vec2(u_h0, u_h1));
if (e_ty.y == -0.0000000000388051084) {
return 100.; // this is NOT executed
}
は少しさらに探している相手:
vec2 e_ty = ds_mul(vec2(1., 0.), vec2(u_h0, u_h1));
if (e_ty.y == 0.) {//-0.0000000000388051084) {
return 100.; // this IS executed
}
ここに行くことができるか
vec2 e_ty = ds_mul(vec2(1., 0.), vec2(0.00130208337, -0.0000000000388051084));
if (e_ty.y == -0.0000000000388051084) {
return 100.; // this line is executed (correct result)
}
しかし、次は同じ結果が得られていないのですか? (速い数学をオフにするには?)私は、これは、いくつかのコンパイラの最適化タイプの魔法である疑いがあるが、私は任意のプラグマ型のオプションを見つけることができません(私は、OpenGL ES 3.0に切り替えた場合)を除いて:私が解決しない
#pragma optimize({on, off}) - enable or disable shader optimization (default on)
問題。私はそこにあると信じて:
#pragma optionNV(fastmath off)
#pragma optionNV(fastprecision off)
は、NVIDIAのために、私はiOSデバイスのための同等のものを見つけることができません。
誰にもアイデアはありますか?これは私にナットを駆動します。..
"誰にもアイデアはありますか?*"はい。浮動小数点数を等価比較しようとしないでください。ほとんど常に悪い考えです。 –