Мне нужно установить цвет по типу байтов или целому числу, а не поплавковым значениям. Как назначить этот тип gl_FragColor
? Разделение значения на 256 не даст мне нужную точность. Моя основная цель - узнать конкретное значение каждого бита в цветовом буфере, если я рисую линию только с определенным цветом. например, я хочу, чтобы в буфере цвета при красном значении пикселя было включено только 2 lsbits, какое значение цвета я должен передать на gl_FragColor
? Если бы у меня была возможность писать значения типа байта, я бы записал значение 3 в красный компонент СпасибоНазначение целочисленных значений для цвета в opengl es 2.0
ответ
Насколько я знаю, gl_FragColor всегда должен быть плавающей точкой. Однако, если вы знаете, что цветной буфер составляет 8 бит на канал, не должно быть трудно заставить все, что вы хотите в него. Вы можете рассмотреть
gl_FragColor = vec4(floor(number)/255.0, 0, 0, 0);
например. Более поздние версии GLSL поддерживают побитовые операции, но я сомневаюсь, что GLES2 делает.
Если вы хотите, чтобы привлечь к конкретным битам, может быть ...
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE);
...
gl_FragColor = vec4(pow(2.0, bitIndex)/255.0, 0, 0, 0);
Я не проверял это, но не вижу причин, почему она не может работать предполагая, что геометрия никогда не перекрывается (в этом случае бит переполнится в следующий).
Спасибо, я проверю – user893269
Если вы используете glVertexAttribPointer для отправки своих данных, установите для параметра * normalized * значение true и укажите свои данные как int. – Kimi