Source     Discussion     Modifier     Historique     Forums     Salon IRC

Source:Initialiser SDL avec OpenGL.cpp

Un article de Games Creators Network.

/****************************************************************/
/*    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);
}

 

Rechercher
Installer l'extension de recherche Plus d'informations

 

Comprendre
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin

 

Partager
La connaissance est la seule chose qui s'accroit lorsqu'on la partage. - Sacha Boudjema

 

Créer
L'imagination est plus importante que la connaissance. - Albert Einstein

 

 

Le wiki en images Le wiki en images Image du mois: «Snowball: un prototype de jeu développé avec NeL.