2013-09-04 3 views
4

나는 카이로를 사용하여 SVG를 렌더링 중이다. Cairo 출력 형식은 ARGB입니다. 그런 다음 렌더링 된 이미지를 SDL_Surface에 넣어 OpenGL 텍스처로 사용할 수 있습니다.OpenGL/SDL에서 ARGB 색상을 사용하려면 어떻게해야합니까?

직접 SDL_Surface를 사용하면 렌더링 된 이미지가 잘 보였습니다. 하지만 필자는 openGL 함수가 필요했기 때문에 표면을 OpenGL의 텍스처로 사용해야했습니다. 문제는 모든 색상이 뒤집혀 있다는 것입니다. OpenGL은 ARGB가 아닌 RGBA를 사용합니다.

아무도 SDL_Surface ARGB를 RGBA로 변환 할 수 있는지 궁금합니다.

유용한 정보 :
이 튜토리얼을 사용하여 SVG를 렌더링했습니다. http://tuxpaint.org/presentations/sdl_svg_svgopen2009_kendrick.pdf
내 소프트웨어는 편집

C.

기록한다 : 나는 OpenGL을 텍스처로 SDL_Surface를 사용하는이 튜토리얼을 사용했다.

렌더링 프로세스와 opengl 텍스처는 모두 자습서와 동일합니다. 당신의 턱시도 예제 코드에 의해 판단

+0

OpenGL 코드를 표시해야합니다. –

+0

"* 그런 다음 렌더링 된 이미지를 SDL_Surface에 넣어서 OpenGL 텍스처로 사용할 수 있습니다. *"OpenGL에는 텍스처 데이터 자체를 업로드하는 기능이 있습니다. SDL을 사용하지 않아도됩니다. –

+0

카이로에서 svg를 렌더링하고 직접 OpenGL 텍스처에 적용 할 수 있습니까? 그것은 최선의 선택이 될 것입니다. @ 루카, 코드가 꽤 큽니다, 표면에 렌더링이 같은 exaclty이기 때문에 tuxpaint의 링크가 충분하다고 생각. 그러나 문제는 ARGB를 사용하는 카이로입니다. 나는 그것에 대해 많이 할 수 있다고 생각하지 않는다. – user1586263

답변

11

, 완전히 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은 픽셀 데이터를 적절한 텍셀 형식으로 변환합니다. 반면에 OpenGL ES는이 작업을 수행하지 않습니다. 이 휴대용으로 만들려면 픽셀 데이터를 직접 RGBA 또는 BGRA로 변환해야 할 수도 있습니다 ...

+0

안녕하세요, 귀하의 회신 주셔서 감사합니다, 그것은 작동 + 그것은 몇 가지 최적화 않았다. 너 멋지다! – user1586263

+0

문제가 해결되었으므로 허용 된 답변으로 표시 할 수 있으면 좋을 것입니다. – legends2k

관련 문제