che*_*ica 6 floating-point opengl-es glsl ios opengl-es-2.0
我正在追逐在iOS设备上运行的OpenGL ES 2.0片段着色器代码中的一些错误.代码在模拟器中运行良好,但在iPad上它有很大的问题,一些计算产生了截然不同的结果,例如我0.0
在iPad和4013.17
模拟器上,所以我不是在谈论可能的小差异一些舍入错误的结果.
我注意到的一件事是,在iPad上,
float1 = pow(float2, 2.0);
Run Code Online (Sandbox Code Playgroud)
可以产生与结果非常不同的结果
float1 = float2 * float2;
Run Code Online (Sandbox Code Playgroud)
具体来说,当使用pow(x, 2.0)
包含较大负数的变量时-8
,它似乎返回满足条件的值if (powResult <= 0.0)
.
此外,两个操作(pow(x, 2.0)
以及x*x
)的结果在模拟器中产生的结果与在iPad上产生的结果不同.
使用的花车是mediump
,但我得到相同的东西highp
.
对这些差异有一个简单的解释吗?
我正在缩小问题范围,但需要花费很多时间,所以也许有人可以通过一个简单的解释来帮助我.