为什么 glTexImage1D、glTexImage2D 和 glTexImage3D 函数需要内部格式(即 GL_RGBA8、GL_R32UI 等)和像素格式?(GL_RGBA,GL_RED_INTEGER)
在我看来,像素格式可以很容易地从内部格式中解释出来。我问这个不仅仅是出于好奇,而是因为我确保我编写的 OpenGL 纹理对象和帧缓冲区对象包装器(从内部格式推断像素格式)能够正确提取所有内部格式的像素格式。
像素格式是您提供纹理数据的格式,内部格式是 OpenGL 在内部存储它的方式。OpenGL 将自动处理转换。
glTexImage2D的手册页有一组很好的内部格式布局表,还解释了每种格式的转换方式。
例如,如果你有一个像素格式GL_RG
和一个内部格式GL_COMPRESSED_RGBA
,GL 会将整个蓝色通道填充为 0,将 alpha 通道填充为 1,然后进行自己的内部压缩。
每个元素都是红/绿双色。GL 将其转换为浮点数并通过附加 0 表示蓝色和 1 表示 alpha 将其组合成一个 RGBA 元素。然后将每个分量乘以有符号比例因子 GL_c_SCALE,添加到有符号偏差 GL_c_BIAS,并限制在 [0,1] 范围内。