我正在学习旧版OpenGL,发现RGBA图像中的glGetTexImage2D(GL_LUMINANCE)
仅返回红色分量。
根据一些手册页,我希望结果是R+G+B
。
对于Mesa 3D,这甚至是test case。
为什么这样工作?我浏览了OpenGL规范,但找不到符合此行为的描述。
更新:
此外,glCopyTexImage2D(GL_LUMINANCE)
仅从RGBA帧缓冲区复制红色分量作为亮度,这似乎是相关的。我也不明白。
答案 0 :(得分:0)
根据documentation for glTexImage2D
:
GL_LUMINANCE
每个元素都是一个亮度值。 GL将其转换为浮点,然后通过将红色,绿色和蓝色的亮度值复制3次并为alpha附加1来将其组装为RGBA元素。然后将每个分量乘以有符号比例因子GL_c_SCALE,加到有符号偏差GL_c_BIAS上,并钳制在[0,1]范围内
因此,在上传时,您将上传单个频道图像。从GPU下载图像时,您会得到相同的结果。
在您链接的代码中,在test_fbo_readpixels_lum_as_rgba()
中,上载的亮度图像是2x2图像,其中每个像素包含0.25。然后,他们将图像下载为RGBA,并期望返回4个像素,每个像素包含(0.25,0.0,0.0,1.0)。这与您所看到的以及上述文档所说的相符。