如何将QImage格式转换为OpenGL支持的格式

5
我正在使用QImage加载图像,并在OpenGL中用作纹理。问题是,在QImage和OpenGL中,颜色分量的顺序不同。目前我在OpenGL中使用GL_RGBA格式,在Qt中使用QImage::Format_ARGB32。因此,我必须在创建OpenGL纹理之前手动交换每个像素的字节。此外,为了正确交换字节,我需要知道机器的字节序。
有人知道更好的解决方案吗?至少,有没有办法使这种转换独立于字节序?
谢谢。
1个回答

6
< p > glTex(Sub)Image 的最后三个参数定义了 像素传输到OpenGL 的方式。如果您有4个8位值,按ARGB顺序依次排列,则建议使用以下方法:

glTexImage2D(..., GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, *);

为了处理字节序转换问题,请使用glPixelStore参数,特别是GL_UNPACK_SWAP_BYTES。上述设计针对小端机器,因此如果您在大端机器上,应在调用此函数之前调用glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE);,然后在之后将其设置为GL_FALSE
注意:我知道你没有提到它,但是如果你考虑移动平台,请记住OpenGL ES不是OpenGL。桌面OpenGL要求实现能够处理各种像素排列在传输操作中。GL ES几乎相反。像素传输格式必须与纹理的内部格式完全匹配。因此,如果你正在进行GL ES开发,你必须自己进行字节交换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接