Почему glGetTexImage2D (GL_LUMINANCE) из текстуры RGBA возвращает только красные компоненты? - PullRequest
0 голосов
/ 16 февраля 2019

Я изучаю устаревший OpenGL и обнаружил, что glGetTexImage2D(GL_LUMINANCE) из изображения RGBA возвращает только красные компоненты в качестве результата.

Согласно некоторым страницам руководства, я ожидаю, что результат будет R+G+B.

Это даже тестовый пример для Mesa 3D.

Почему это так работает?Я просматриваю спецификацию OpenGL, но не могу найти описание, соответствующее этому поведению.

Обновление:

Кроме того, glCopyTexImage2D(GL_LUMINANCE) копирует только красный компонент как яркость из кадрового буфера RGBA, который кажется связанным,Я тоже этого не понимаю.

1 Ответ

0 голосов
/ 16 февраля 2019

Согласно документации для glTexImage2D:

GL_LUMINANCE

Каждый элемент имеет одно значение яркости.GL преобразует его в число с плавающей точкой, затем собирает его в элемент RGBA, трижды реплицируя значение яркости для красного, зеленого и синего и добавляя 1 для альфы.Затем каждый компонент умножается на масштабированный коэффициент со знаком GL_c_SCALE, добавляется к смещению со знаком GL_c_BIAS и ограничивается диапазоном [0,1]

. Таким образом, при загрузке вы загружаете изображение одного канала.Имеет смысл, что вы получите то же самое при загрузке изображения из графического процессора.

В коде, с которым вы связаны, в test_fbo_readpixels_lum_as_rgba() загруженное изображение яркости - это изображение 2x2, где каждый пиксель содержит 0,25,Затем они загружают изображение как RGBA и ожидают получить обратно 4 пикселя, каждый из которых содержит (0,25, 0,0, 0,0, 1,0).Это соответствует тому, что вы видите, и тому, что написано в приведенной выше документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...