2

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

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

4

1 回答 1

6

像素格式是您提供纹理数据的格式,内部格式是 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] 范围内。

于 2013-02-27T19:58:03.633 回答