OpenGL纹理上传:UNSIGNED_BYTE vs UNSIGNED_INT_8_8_8_8

时间:2011-10-16 17:58:16

标签: opengl pixelformat

我正在调用glTexSubImage2D。如果我的像素格式为GL_RGBA,那么像素类型GL_UNSIGNED_BYTEGL_UNSIGNED_INT_8_8_8_8完全相同吗?

另外,这两对是否等同?

  • Format = GL_RGBA, Type = GL_UNSIGNED_INT_8_8_8_8
  • Format = GL_BGRA, Type = GL_UNSIGNED_INT_8_8_8_8_REV

我已经尝试过阅读OpenGL规范和GL_EXT_packed_pixels规范,但说实话,我无法做出它们的头部或尾部。

1 个答案:

答案 0 :(得分:20)

答案是否和否。您必须考虑计算机中的字节顺序。如果您有GL_RGBAGL_UNSIGNED_INT_8_8_8_8,则意味着像素以32位整数存储,并且颜色在逻辑顺序RGBA中以这样的整数存储,例如,红色位于高位字节,alpha位于低位字节。但如果机器是little-endian(与Intel CPU一样),那么内存中的实际顺序是ABGR。然而,GL_RGBA GL_UNSIGNED_BYTE将以RGBA顺序存储字节,无论计算机是小端还是大端。

带有GL_BGRA

GL_UNSIGNED_INT_8_8_8_8_REV会以逻辑顺序ARGB存储整数颜色,但是在小端机器上,您会在内存中获得BGRA顺序。