Почему арифметические функции GLSL дают на iPad такие разные результаты, как на симуляторе?
В настоящее время я преследую некоторые ошибки в моем фрагментном шейдерном коде OpenGL ES 2.0, который работает на устройствах iOS. Код прекрасно работает в симуляторе, но на 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
.
Is there a simple explanation for those differences?
Я сужаю проблему, но это занимает так много времени, так что, возможно, кто-то может помочь мне с простым объяснением.