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){ 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;
}
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
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);
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.
|