我目前正在寻找在 iOS 设备上运行的 OpenGL ES 2.0 片段着色器代码中的一些错误。代码在模拟器中运行良好,但在 iPad 上它有很大的问题,并且一些计算产生了截然不同的结果,例如我0.0
在 iPad 和4013.17
模拟器上,所以我不是在谈论可能是小的差异一些舍入错误的结果。
我注意到的一件事是,在 iPad 上,
float1 = pow(float2, 2.0);
可以产生与以下结果截然不同的结果
float1 = float2 * float2;
具体来说,当pow(x, 2.0)
在包含较大负数的变量上使用时-8
,它似乎返回了一个满足条件的值if (powResult <= 0.0)
。
此外,这两种操作的结果(pow(x, 2.0)
以及x*x
)在模拟器中产生的结果与在 iPad 上的结果不同。
用过的花车是mediump
,但我得到了同样的东西highp
。
这些差异有简单的解释吗?
我正在缩小问题的范围,但这需要很多时间,所以也许有人可以在这里帮助我做一个简单的解释。