¿Por qué las funciones aritméticas de GLSL producen resultados tan diferentes en el iPad que en el simulador?
Actualmente estoy persiguiendo algunos errores en mi código de sombreado de fragmentos OpenGL ES 2.0 que se ejecuta en dispositivos iOS. El código funciona bien en el simulador, pero en el iPad tiene grandes problemas y algunos de los cálculos arrojan resultados muy diferentes, por ejemplo0.0
en el iPad y4013.17
en el simulador, así que no estoy hablando de pequeñas diferencias que podrían ser el resultado de algunos errores de redondeo.
Una de las cosas que noté es que, en el iPad,
float1 = pow(float2, 2.0);
pueden dar resultados que son muy diferentes de los resultados de
float1 = float2 * float2;
Específicamente, cuando se usapow(x, 2.0)
en una variable que contiene un número negativo más grande como-8
, parecía devolver un valor que satisfacía la condición.if (powResult <= 0.0)
.
Además, el resultado de ambas operaciones (pow(x, 2.0)
tanto comox*x
) produce resultados diferentes en el simulador que en el iPad.
Los flotadores usados sonmediump
, pero me sale lo mismo conhighp
.
¿Hay una explicación simple para esas diferencias?
Estoy reduciendo el problema, pero lleva mucho tiempo, así que quizás alguien pueda ayudarme aquí con una explicación simple.