12.2.11 La fonction qui initialise la classe PAppSdlOpenGl3

C'est la fonction qui va faire tout le boulot répétitif, initialisation de SDL, de OpenGl, connexion des deux, etc :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
void PAppSdlOpenGl3::initialisationPAppSdlOpenGl3(const std::string& titreFenetre, int largeurFenetre, int hauteurFenetre){
	p_titreFenetre = titreFenetre;
	p_largeurFenetre = largeurFenetre;
	p_hauteurFenetre = hauteurFenetre;
	if(SDL_Init(SDL_INIT_VIDEO) < 0){  // Initialisation de la SDL
		std::cout << "Erreur lors de l'initialisation de la SDL : " << SDL_GetError() << std::endl;
		p_isOpenGlSdlInit = false;
		return;
	}else{
		std::cout << "Mode vidéo de SDL initialisé." << std::endl; 
	}
		
	// Version d'OpenGL
	SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
	SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
		
	// Double Buffer
	SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
	SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
		
	// Création de la fenêtre
	p_fenetre = SDL_CreateWindow(p_titreFenetre.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, p_largeurFenetre, p_hauteurFenetre, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);
	if(p_fenetre == NULL){
		std::cerr << "Impossible de créer la fenêtre : "  << SDL_GetError() << std::endl;
		p_isOpenGlSdlInit = false;
		dontRun();
		return;
	}else{
		std::cout << "Création de la fenêtre." << std::endl;
	}
	p_contexteOpenGL = SDL_GL_CreateContext(p_fenetre);
	
	//on dit qu'il faut faire un test de profondeur (pour l'affichage 3D)
	glEnable(GL_DEPTH_TEST);
	
	p_isOpenGlSdlInit = true;
	p_matModelview.loadIdentity();
	p_matProjection.loadIdentity();
	setFPS(30.0);
	p_cameraGL.setWindowID(p_fenetre);
}

Faites attention à ne pas appeler SDL_Quit, si l'initialisation foire, car on appelle cette fonction dans le destructeur de l'application.