Сегодня утром я натолкнулся на то, что казалось загадочной ошибкой, и мне очень повезло, что я довольно быстро наткнулся на решение.
Я делил на счетчик, чтобы получить среднее значение внутри фрагментного шейдера, и, конечно, когда счетчик равен нулю, результирующее значение цвета становится NaN.
Во время смешивания NVidia изящно обрабатываетNaN как значение 0, но Intel не делает и, по-видимому, каскадирует NaN, что приводит к появлению черных фрагментов.
И эта ошибка сохранялась, пока я не протестировал код на машине Intel.
Интересно, можно ли что-нибудь сделать, чтобы "перехватить" недопустимые значения.Кажется, что, как и в обычном программировании, единственный надежный (и даже тогда не чувствующий себя пуленепробиваемым) способ справиться с этим - тщательно рассмотреть все возможные случаи при делении чисел.
Стандартный способОбнаружить NaN означает, что число не равно самому себе.Могу ли я, возможно, построить отладочный шейдер, который проверяет каждый фрагмент, чтобы определить, не равен ли он сам себе, и, если это условие выполнено, установить мигающий, бросающийся в глаза цвет?Позволяет ли GLSL мне обнаруживать NaN таким образом, или я застреваю с неопределенным поведением всякий раз, когда значение недопустимо?