Как работать с NaN или inf в шейдерах OpenGL ES 2.0

Это основано на вопросе: лучший способ обнаружить NaN в шейдерах OpenGL

Стандартный GLSL определяет функции isnan () и isinf () для обнаружения. Язык затенения OpenGL ES 2.0 отсутствует. Как я могу справиться с NaNs и Infs?

Вы можете проверить NaN через условие, которое будет истинно только для NaN:

bool isNan(float val) { return (val <= 0.0 || 0.0 <= val) ? false : true; } 

isinf немного сложнее. Нет никакого механизма для преобразования float в его целочисленное представление и игры с битами. Поэтому вам придется сравнивать его с достаточно большим количеством.

Такая же проблема для WebGL. Ответ Nicol Bolas отлично подходит для большинства графических процессоров, но не для некоторых nVidias. Эта версия работает хорошо для всех графических процессоров. У меня была возможность попробовать:

 bool isNan( float val ) { return ( val < 0.0 || 0.0 < val || val == 0.0 ) ? false : true; // important: some nVidias failed to cope with version below. // Probably wrong optimization. /*return ( val <= 0.0 || 0.0 <= val ) ? false : true;*/ } 

Untested, поэтому не уверен, что это сработает (из-за оптимизации), но оно должно работать, как для Inf, так и для -Inf.

  bool isinf(float val) { return (val != 0.0 && val * 2.0 == val) ? true : false; } 
Intereting Posts
Пригласить пользователей с AppInviteDialog Как установить расширенные пользовательские атрибуты в файлах Android? Как сделать phonegap window.location.href не запускать Chrome на Android Как надежно декодировать штрих-коды PDF417 на Android с помощью программного обеспечения (а не Zxing)? Лучший способ сделать кросс-платформенные приложения? Как изменить уровень API с 8 на 3 в Eclipse Как заполнить пароль EditText с Android uiautomator? Обновите базу данных sqlite, которую я копирую из папки с ресурсами (Android) Невозможно рассчитать размер папки в Gingerbread (2.3) Android: Когда вызывается onCreateOptionsMenu во время жизненного цикла Activity? Сбой карты Google с помощью ресурсов $ NotFoundException при замене в FrameLayout (Android Studio) Предложить имена переменных по внешним классам в кратчайшие сроки? LockCanvas () возвращает различные холсты Объединение java и nodejs для приложения для Android Как указать ширину и высоту ячеек Android GridLayout в относительных показателях?