Я использую свой альфа-канал в качестве 8-битного целочисленного индекса для чего-то, не связанного с смешиванием, поэтому я хочу тщательно контролировать значения битов. В частности, мне нужно, чтобы все пиксели из одной FBO-визуализированной текстуры с определенным альфа-значением соответствовали всем пикселям с одинаковым альфа-значением в шейдере. Опыт научил меня быть осторожным при сравнении значений с плавающей точкой на равенство ...
Хотя установка значений цвета с использованием плавающей запятой vec4 может не вызывать у меня проблем, и я понимаю, что даже 16-битное с плавающей точкой половинной точности сможет различать все 8-битные целочисленные (0-255) значения. Но я бы предпочел выполнять целочисленные операции во фрагментном шейдере, поэтому я уверен в значениях.
Могу ли я понизить производительность, выполнив целочисленные операции во фрагментном шейдере?
Как масштабируется выход? Я где-то читал, что допустимо посылать целочисленные векторы в качестве вывода цвета для фрагмента. Но как это масштабируется? Если я отправлю uvec4 с целыми числами 0-255, будет ли он масштабироваться соответствующим образом? Я хотел бы, чтобы он непосредственно записывал целочисленное значение в пиксельный формат, для целочисленных форматов я не хочу, чтобы он выполнял какое-либо масштабирование. Возможно, для RGBA8, отправка значения int выше 255 ограничит его значением 255, отрицательные целые числа обнулит и т. Д.
Эта проблема осложняется тем фактом, что я не могу отладить, распечатав значения цвета, если я не возьму визуализированные изображения и тщательно их не изучу. Возможно, я смогу нарисовать яркий цвет, если что-то не соответствует.
Здесь - соответствующая тема, которую я нашел по этой теме. Это смутило меня даже больше, чем раньше.