¿Hay alguna manera de usar OpenGL y SDL usando las funciones 3D de
OpenGL y las funciones 2D de SDL en un mismo programa, para podre
blitear sobre opengl?
Hay una opcion en SetVideoMode que es SDL_OPENGLBLIT que dice que esta
ahi por tema de compatibilidad y recomienda no usarlo en programas
nuevos. Buscando en google me encuentro con esto:
http://twomix.devolution.com/pipermail/sdl/2001-November/039852.html
Si alguien conoce alguna manera que no sea con OpenGLBlit o si es con
esa y la hecho funcionar que cuente su experiencia.
gracias
Al inicializar el modo de video, llamas a la función SDL_SetVideoMode
con el flag SDL_OPENGL:
SDL_SetVideoMode(800, 600, 32, SDL_OPENGL);
Luego debes setear algunos atributos del contexto OpenGL:
// 8 bits para cada componente rojo, verde y azul
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
// 32 bits por pixel
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 32);
// con double buffer
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
Luego para trabajar en modo 2D, se debe crear una proyección
ortográfica:
// Color negro para limpiar framebuffer
glClearColor(0.f, 0.f, 0.f, 0.f);
// Tamaño ventana
glViewport(0, 0, 800, 600);
// Creamos la proyección ortográfica
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
gluOrtho2D(0, 800, 600, 0);
Ahora para mostrar una imagen en pantalla, deberás cargarla con la
función IMG_Load (SDL_image) y a partir de esta crear una textura 2D,
con las funciones: glGenTextures, glBindTexture, glTexImage2D,
glTexParameterf.
Para dibujar la textura utilizarás las funciones de OpenGL. Se resume
en seleccionar la textura que quieres mostrar con la funcion
glBindTexture, y luego usar transformaciones para mostrar la imagen:
glTranslatef, glScaled, glRotatef. Ojo que la textura se debe aplicar
a un polígono, para este caso se usa un cuadrado: GL_QUADS.
Por ultimo la función de page flipping SDL_Flip, es cambiada por
SDL_GL_SwapBuffers.
Y en general esos son los pasos para trabajar con OpenGL y SDL. Todo
los demás se usa igual, el manejo de eventos, sonido, etc.
Si quieres mostrar texto en OpenGL puedes usar SDL_ttf, pero al igual
que las imagenes, se deben transformar en texturas antes de mostrarse.
También puedes usar la biblioteca QuesoGLC.
Más info en la documentación oficial de SDL:
Ahora el proceso de blitting es realizado por OpenGL, cuando se
muestra un poligono (cuadrado) con un textura (imagen).