Warum liefern die Rechenfunktionen von GLSL auf dem iPad so unterschiedliche Ergebnisse als auf dem Simulator?
Ich verfolge derzeit einige Fehler in meinem OpenGL ES 2.0-Fragment-Shader-Code, der auf iOS-Geräten ausgeführt wird. Der Code läuft gut im Simulator, aber auf dem iPad gibt es große Probleme und einige der Berechnungen führen zu sehr unterschiedlichen Ergebnissen, die ich zum Beispiel hatte0.0
auf dem iPad und4013.17
Ich spreche also nicht von kleinen Unterschieden, die das Ergebnis von Rundungsfehlern sein könnten.
Eines der Dinge, die mir aufgefallen sind, ist, dass auf dem iPad
float1 = pow(float2, 2.0);
kann zu Ergebnissen führen, die sich von den Ergebnissen von unterscheiden
float1 = float2 * float2;
Insbesondere bei der Verwendungpow(x, 2.0)
auf eine Variable mit einer größeren negativen Zahl wie-8
Es schien einen Wert zurückzugeben, der den Zustand befriedigteif (powResult <= 0.0)
.
Auch das Ergebnis beider Operationen (pow(x, 2.0)
ebenso gut wiex*x
) liefert im Simulator andere Ergebnisse als auf dem iPad.
Benutzte Schwimmer sindmediump
, aber ich bekomme das gleiche Zeug mithighp
.
Gibt es eine einfache Erklärung für diese Unterschiede?
Ich grenze das Problem ein, aber es dauert so lange, dass mir hier vielleicht jemand mit einer einfachen Erklärung helfen kann.