我正在调用glTexSubImage2D。如果我的像素格式为GL_RGBA
,那么像素类型GL_UNSIGNED_BYTE
和GL_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规范,但说实话,我无法做出它们的头部或尾部。
答案 0 :(得分:20)
答案是否和否。您必须考虑计算机中的字节顺序。如果您有GL_RGBA
和GL_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顺序。