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