glTexImage * D参数冗余?

时间:2013-02-27 19:51:43

标签: c++ opengl

为什么glTexImage1D,glTexImage2D和glTexImage3D函数确实需要内部格式(即GL_RGBA8,GL_R32UI等)和像素格式? (GL_RGBA,GL_RED_INTEGER)

在我看来,像素格式可以很容易地从内部格式解释。我问这不只是出于好奇,而是因为我确定我编写的OpenGL纹理对象和帧缓冲区对象包装器(从内部格式推断出像素格式)能够正确地提取所有内部格式的像素格式。

1 个答案:

答案 0 :(得分:6)

像素格式是您提供纹理数据的格式,内部格式是OpenGL在内部存储它的方式。 OpenGL将自动处理转换。

man page for glTexImage2D有一套很好的内部格式布局表,并解释了每种格式的转换方式。

例如,如果您的像素格式为GL_RG且内部格式为GL_COMPRESSED_RGBA,则GL会将整个蓝色通道填充为0,将Alpha通道填充为1,然后自行填写内部压缩。

  

每个元素都是红色/绿色双。 GL将其转换为浮点,并通过将0附加为蓝色而将1附加为alpha来将其组合为RGBA元素。然后将每个分量乘以有符号的比例因子GL_c_SCALE,加到有符号偏差GL_c_BIAS,并钳位到[0,1]范围。