Opengl es 着色器优化和精度问题

Opengl es 着色器优化和精度问题,opengl-es,opengl-es-2.0,glsl,precision,Opengl Es,Opengl Es 2.0,Glsl,Precision,我对基于OpenGL ES的硬件上的MAD优化和接近无穷大/浮点边界的数字有问题 我想做的是: 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;

我对基于OpenGL ES的硬件上的MAD优化和接近无穷大/浮点边界的数字有问题

我想做的是:

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)
最有趣的是(让我为此奋斗了很长一段时间)在桌面硬件上工作正常


所以。。。这是正常行为,还是我遗漏了什么?

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

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

尝试在着色器中包含“precision highp float”。如果您的情况是上述情况,它应该可以解决问题

我希望能在某种程度上有所帮助


毛里齐奥

你用什么硬件?这可能是由于缺乏浮点精度造成的。@keaukraine-我在Android上遇到了这个问题,它有什么GPU?它们都非常不同,在硬件和OpenGL驱动程序中都有不同的错误。@keaukraine-Qualcomm 200您有这样的
precision mediump float在着色器顶部?