为什么glTexImage1D,glTexImage2D和glTexImage3D函数确实需要内部格式(即GL_RGBA8,GL_R32UI等)和像素格式? (GL_RGBA,GL_RED_INTEGER)
在我看来,像素格式可以很容易地从内部格式解释。我问这不只是出于好奇,而是因为我确定我编写的OpenGL纹理对象和帧缓冲区对象包装器(从内部格式推断出像素格式)能够正确地提取所有内部格式的像素格式。
答案 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]范围。