着色器MAD优化和精度问题

时间:2014-04-02 06:03:38

标签: opengl-es opengl-es-2.0 glsl precision

我在MAD优化方面遇到问题,并且基于OpenGL ES的硬件上的数字接近无限/浮动边界。

我想做的事情:

vec2 k = d/l;         // VERYY BIG number 10^6 -10^8, but still ok by itself

//vertex.w = 0 or 1
res += k * (1.0 - vertex.w);  // enable/disable by !vertex.w This form is ok
//res += k - k *vertex.w;     // but this is not (I think it becomes NaN, cuz I don't see a thing)

什么是最有趣的(并且让我长时间努力)它在桌面硬件上运行正常。

所以......这是正常的行为,还是我错过了什么?

1 个答案:

答案 0 :(得分:0)

这可能取决于GPU的浮动分辨率(应该是Adreno 203?)。

大多数情况下,它依赖于驱动程序对浮点数执行的优化,当应用中等精度时,(AFAIK)会删除浮点数的尾数的一部分(希望说得好)。

尝试包含"精确的highp float"在你的着色器中。如果您的情况如上所述,则应该解决问题。

我希望能以某种方式提供帮助。

莫里吉奥