如何在opengl/SDL中使用ARGB颜色?

uemypmqf  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(223)

我正在用Cairo渲染SVG。Cairo的输出格式是ARGB。然后我把渲染后的图像放在一个SDL_Surface中,这样我就可以把它作为一个openGL纹理使用。
当我直接使用SDL_Surface时,渲染的图像看起来很好。但是我不得不在openGL中使用表面作为纹理,因为我需要一些openGL函数。问题是,所有的颜色都被翻转了。OpenGL使用的是RGBA而不是ARGB。
我想知道是否有人可以帮助我将SDL_Surface ARGB转换为RGBA。
有用信息:
我用这个教程来渲染我的SVG。http://tuxpaint.org/presentations/sdl_svg_svgopen2009_kendrick.pdf
我的软件是用C语言编写的。
编辑:我在本教程中使用了SDL_Surface作为openGL纹理。
http://www.sdltutorials.com/sdl-tip-sdl-surface-to-opengl-texture
渲染过程和opengl纹理都与教程中的相同。

8cdiaqws

8cdiaqws1#

从Tux示例代码来看,您可以完全跳过SDL,使用以下代码手动为OpenGL提供像素数据:

GLuint tex;

glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image);

这里的重要细节是像素数据的GL_BGRAGL_UNSIGNED_INT_8_8_8_8_REV数据类型(这在像素传输操作期间颠倒了通道的顺序)。OpenGL将负责将像素数据转换为适合您的texel格式。另一方面,OpenGL ES不会这样做;为了使这个便携式,你可能想要转换像素数据到RGBA或BGRA自己...

相关问题