Согласно документации для 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).Это соответствует тому, что вы видите, и тому, что написано в приведенной выше документации.