2012-02-07 2 views
-1

Я пытаюсь написать шейдер GLSL с выходом uvec4, но его не работает.Как получить выход uvec4 из программы GLSL

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

мне нужно сделать что-то на стороне C++, чтобы получить данные uvec4 ли?

smooth out uvec4 Result; 

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

Попробуйте следующее: Результат = uvec4 (4294967295, 4294967295, 4294967295, 4294967295); –

ответ

2

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

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

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

+0

Я намерен использовать его для целей без изображения, таких как обнаружение столкновения, выбор и т. Д. Математика для того, что я пытаюсь реализовать, предназначена для целых чисел. Я показывал экран для тестирования. Вы говорите, что мне нужно визуализировать текстуру с значениями цвета uint, чтобы это работало? – XZodia

+0

Да, вот что я сказал. У вашей текстуры должен быть целочисленный формат изображения. –

Смежные вопросы