Как получить вывод uvec4 из программы GLSL - PullRequest
0 голосов
/ 08 февраля 2012

Я пытаюсь написать GLSL-шейдер с выводом uvec4, но он не работает.

Эта простая программа приводит к черному цвету, когда я ожидаю белый ...

Нужно ли что-то делать на стороне c ++ для получения данных uvec4?

smooth out uvec4 Result;

void main(void)
{
   Result = uvec4(255, 255, 255, 255);
}

1 Ответ

3 голосов
/ 08 февраля 2012

uvec4 - целое число без знака.В текстуру можно записывать только целочисленные значения без знака, которые также имеют целое число без знака формат текстуры . Предупреждение : не путайте нормализованные форматы текстур с целочисленными форматами.GL_RGBA8 - это , а не формат целочисленной текстуры без знака.Это нормализованный формат текстуры без знака.Если вы хотите написать действительные целые числа, тогда вы должны написать GL_RGBA8UI.

Однако, если я могу прочитать ваши намерения, вы, вероятно, ожидаете, что uvec4(255, 255, 255, 255) будет белым.Вы не можете сделать это.Если вы хотите визуализировать на экране, вы должны использовать правильные значения цвета с плавающей точкой.Они будут преобразованы в соответствующие значения для вывода.Если выходное изображение имеет формат GL_RGBA8, то значения с плавающей запятой в диапазоне [0, 1] будут преобразованы в [0, 255] для хранения.

Так что вы должны записывать в vec4и запись значений в диапазоне [0, 1].Не пытайтесь бороться с этим;просто примите это сейчас и двигайтесь дальше.

...