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;
}