Bonjour à tous,
initialiser la SDL se fait normalement avec SDL_Init et des flags qui indiquent quelles parties activer
[mode bourrin ON]
j'ai essayé un SDL_Init(0) avec succès
suivi d'un SDL_InitSubSystem(SDL_INIT_VIDEO) avec succès également
j'ai supprimé le SDL_Init(0) sans que cela pose problème
[mode bourrin OFF]
je me demandais si ce principe était convenable et ne risquait pas de poser des problèmes sur d'autres systèmes (je suis sous windows)
en fait, je cherche à mettre la gestion de l'affichage (création de la fenêtre, changement de résolution, passe en fullscreen...) dans un singleton
le constructeur du singleton fait appel à SDL_InitSubSystem(SDL_INIT_VIDEO) et son destructeur fait appel à SDL_QuitSubSystem(SDL_INIT_VIDEO)
visiblement ça ne pose pas de problème à la SDL
dites moi ce que vous en pensez
ps: je précise qu'un appel à SDL_Quit est effectué lorsque le programme se termine, à voir également s'il est nécessaire ou inutile, pour l'instant j'ai préféré le laisser
ci joint, une partie du code du singleton CDisplay :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
42
43
44
45
46
47
48
49
50
51 #include "Display.h" #include "sdl/sdl.h" // static declaration of display manager's unique instance CDisplay* CDisplay::m_pInstance = NULL; // constructor & virtual destructor CDisplay::CDisplay(void) { // initialisation SDL video if ( SDL_InitSubSystem( SDL_INIT_VIDEO ) < 0 ) { printf( "Echec SDL_Init : %s\n", SDL_GetError() ); return; // throw exception } // display parameters m_sTemp.nScreenX = DISPLAY_SCREENX_DEFAULT; m_sTemp.nScreenY = DISPLAY_SCREENY_DEFAULT; m_sTemp.nScreenBpp = DISPLAY_SCREENBPP_DEFAULT; // fullscreen flag m_sTemp.bFullscreen = DISPLAY_FULLSCREEN_DEFAULT; // OpenGL parameters m_sTemp.nZBits = DISPLAY_ZBUFFER_DEFAULT; m_sTemp.nStencilBits = DISPLAY_STENCIL_DEFAULT; // mise à jour de l'affichage Update(m_sTemp); } CDisplay::~CDisplay(void) { SDL_QuitSubSystem( SDL_INIT_VIDEO ); } // static method to retrieve unique instance of manager CDisplay* CDisplay::Initialize(void) { if(!m_pInstance) m_pInstance = new CDisplay; return m_pInstance; } void CDisplay::ShutDown(void) { delete m_pInstance; m_pInstance = NULL; }
Partager