Можно ли назначить текстуру GL_FLOAT для FBO в качестве вложения COLOR? - PullRequest
0 голосов
/ 27 июля 2011

Для закадрового рендеринга текстуры я прикрепляю к вложению GL_COLOR_ATTACHMENT0 текстуру, определяемую

glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, ширина, высота, 0, GL_RGBA, GL_FLOAT, NULL);

Затем я рендерился в FBO, используя фрагментный шейдер, который выводит vec4, так что обычно все должно быть в порядке. Чтобы проверить правильность отображения текстуры, я использую функцию

glTexSubImage2D ()

для добавления серых пикселей в середине текстуры. Текстура отображается правильно (я прекрасно вижу эти пиксели в нужном месте), но остальная часть текстуры представляет собой только шумные артефакты (когда она не черная).

Это связано с тем, что я использую GL_FLOAT для текстуры GL_RGBA? Если да, как я могу, в GLSL, преобразовать uvec4 в vec4? Вывод моего основного шейдера - vec4, и я не знаю, как преобразовать вывод uvec4 текстуры usampler2D в мой окончательный vec4.

Спасибо за любой ответ, который вы можете предоставить:)

РЕДАКТИРОВАТЬ: я нашел решение: я не очистил GL_COLOR_BUFFER_BIT между моими 2 рендерами.

1 Ответ

3 голосов
/ 27 июля 2011

Я знаю, что на этот вопрос ответили сами, но нужно обсудить это:

glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,width,height,0,GL_RGBA,GL_FLOAT,NULL);

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

Фактический формат текстуры является третьим параметром; это определяет, что на самом деле содержит текстура. Последние три параметра определяют, как вы пытаетесь загрузить данные в текстуру ; если указатель равен NULL (и PBO не связан), то параметры означают ничего .

...