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

时间:2013-09-04 22:32:01

标签: c opengl colors textures sdl

我正在使用Cairo渲染SVG。开罗输出格式是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纹理都与教程相同。

1 个答案:

答案 0 :(得分:13)

根据您的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_BGRA format for the pixel dataGL_UNSIGNED_INT_8_8_8_8_REV data type(这会在像素传输操作期间反转通道的顺序)。 OpenGL将负责将像素数据转换为适合您的texel格式。另一方面,OpenGL ES不会这样做;为了使这个便携式您可能想要自己将像素数据转换为RGBA或BGRA ...