为什么来自RGBA纹理的glGetTexImage2D(GL_LUMINANCE)仅返回红色分量?

时间:2019-02-16 15:42:17

标签: opengl

我正在学习旧版OpenGL,发现RGBA图像中的glGetTexImage2D(GL_LUMINANCE)仅返回红色分量。

根据一些手册页,我希望结果是R+G+B

对于Mesa 3D,这甚至是test case

为什么这样工作?我浏览了OpenGL规范,但找不到符合此行为的描述。

更新:

此外,glCopyTexImage2D(GL_LUMINANCE)仅从RGBA帧缓冲区复制红色分量作为亮度,这似乎是相关的。我也不明白。

1 个答案:

答案 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)。这与您所看到的以及上述文档所说的相符。