/****************************************************************/
/* Titre: Initialiser SDL avec OpenGL
/* Auteur: Corkus
/* But: Simple programme pour utiliser OpenGL pour l'affichage
/* et SDL pour le fenetrage, l'entrée(clavier, souris...)
/****************************************************************/
#include <stdlib.h>
#include <SDL/SDL.h>
#include <GL/gl.h>
#include <GL/glu.h>
void Display();
void Reshape(int w, int h);
void InitOpenGL();
void InitSDL();
/* Surface écran */
SDL_Surface* fenetre;
int main(int argc, char* argv[])
{
/* Toujours initialiser SDL avant OpenGL */
InitSDL();
InitOpenGL();
Reshape(640,480);
/* Boucle d'évènement */
bool quit = false;
while(!quit)
{
SDL_Event event;
if(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
quit = true;
break;
case SDL_VIDEORESIZE:
/* Ajuste le rapport entre les objets OpenGL et la taille
de la fenêtre */
Reshape(event.resize.w,event.resize.h);
}
}
Display();
}
return 0;
}
void Display()
{
/* Affiche un simple cube */
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(4,3,3,0,0,0,0,1,0);
glBegin(GL_QUADS);
glColor3d(1.,0.,0.);
glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,1,1);
glColor3d(0.,1.,0.);
glVertex3i(1,1,-1);
glVertex3i(1,-1,-1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);
glColor3d(0.,0.,1.);
glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
glVertex3i(1,1,-1);
glColor3d(0.,1.,1.);
glVertex3i(-1,1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);
glColor3d(1.,1.,0.);
glVertex3i(-1,1,-1);
glVertex3i(-1,1,1);
glVertex3i(1,1,1);
glVertex3i(1,1,-1);
glColor3d(1.,0.,1.);
glVertex3i(-1,-1,-1);
glVertex3i(-1,-1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
glEnd();
/* Équivalent à SDL_Flip() */
SDL_GL_SwapBuffers();
}
void Reshape(int w, int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0, (float) w/h, 1.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void InitOpenGL()
{
glClearColor(0.0,0.0,0.0,0.0);
glClearDepth(1.0);
glEnable(GL_DEPTH_TEST);
}
void InitSDL()
{
SDL_Init(SDL_INIT_VIDEO);
/* Ferme SDL en sortie de programme */
atexit(SDL_Quit);
/* Indique à OpenGL que le double buffering est activé */
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
/* Indique la taille du buffer de profondeur */
SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16);
fenetre = SDL_SetVideoMode(640,480,32, SDL_OPENGL
| SDL_GL_DOUBLEBUFFER
| SDL_RESIZABLE
| SDL_SWSURFACE);
}