01 - Initialisation
mardi 14 octobre 2003, par Bech ()
Cet article explique comment initialiser et quitter la SDL. Il explique aussi comment basculer le mode graphique souhaité.
Les fonctions présentées dans cet article seront :
SDL_Init
SDL_WM_SetCaption
SDL_SetVideoMode
SDL_Quit
Une application utilisant SDL ressemble beaucoup à celles utilisant les BGIs sous turbo pascal.
On commence par initialiser la SDL (SDL_Init), puis le mode graphique souhaité (SDL_SetVideoMode).
En fin d’application, on signal à la SDL de fermer la fenêtre par SDL_Quit.
SDL_Init
SDL_Init permet d’activer la SDL et d’initialiser certaines parties de celle-ci.
Définition : function SDL_Init( flags : uint32 ) : Integer ;
Résultat : la fonction retourne -1 en cas d’échec, sinon 0.
Le paramètre flags indique quels sous-systèmes de la SDL doivent être initialisés. Les valeurs possibles sont :
| Valeur | Description |
|---|---|
| SDL_INIT_TIMER | Fonction timer |
| SDL_INIT_AUDIO | gestion du son |
| SDL_INIT_VIDEO | affichage video |
| SDL_INIT_CDROM | lecture audio sur cdrom |
| SDL_INIT_JOYSTICK | gerer les joystick |
| SDL_INIT_EVERYTHING | tous les système précédents |
| SDL_INIT_NOPARACHUTE | la SDL ne bloque pas les signaux d’erreurs fatales |
| SDL_INIT_EVENTTHREAD | Evenements par thread |
Plusieurs valeurs peuvent être utilisées, séparées par un ’OR’.
Exemple : SDL_Init(SDL_INIT_VIDEO or SDL_INIT_AUDIO) ;
SDL_WM_SetCaption
SDL_WM_SetCaption permet de modifier le nom de la fenêtre utilisée par la SDL pour l’affichage graphique. Ce nom sera aussi présent sur le bouton dans la barre des tâches.
Exemple : SDL_WM_SetCaption(’SDL_Test 1’, nil) ;
SDL_SetVideoMode
SDL_SetVideoMode permet d’initialiser le mode video.
Définition : function SDL_SetVideoMode( width, height, bpp : Integer ; flags : UInt32) : PSDL_Surface ;
Résultat : la fonction retourne un pointeur de surface (PSDL_Surface) sur l’écran, ou nil en cas d’erreur.
width et height indiquent la largeur et hauteur de la résolution d’affichage (640 et 480 par exemple).
bpp indique le nombre de bits par pixels (8 ou 16 par exemple).
Le paramètre flags indique les options à utiliser pour le mode vidéo. Les valeurs possibles sont :
| Valeur | Description |
|---|---|
| SDL_SWSURFACE | utiliser la mémoire système |
| SDL_HWSURFACE | utiliser la mémoire vidéo |
| SDL_ASYNCBLIT | utiliser un affichage asynchrone |
| SDL_ANYFORMAT | utiliser un autre format si celui désiré n’est pas possible |
| SDL_HWPALETTE | La SDL aura un accès exclusif à la palette des couleurs |
| SDL_DOUBLEBUF | Permet d’utiliser deux buffers et de faire des ’SDL_Flip’ pour modifier l’affichage |
| SDL_FULLSCREEN | passage en plein écran |
| SDL_OPENGL | Création d’un contexte OpenGL |
| SDL_OPENGLBLIT | Création d’un contexte OpenGL + permettre affichage normal |
| SDL_RESIZABLE | La fenêtre pourra changer de taille |
| SDL_NOFRAME | La fenêtre ne disposera pas de barre de titre |
Plusieurs valeurs peuvent être utilisées, séparées par un ’OR’.
Exemple : screen_ := SDL_SetVideoMode(640, 480, 8, SDL_SWSURFACE) ;
SDL_Quit
SDL_Quit permet de fermer la SDL. On l’éxécute à la fin de l’application.
Exemple
Voici un petit exemple qui utilise les fonctions précédentes :
program SDL_Test1;
uses
sysutils,
SDL;
var
// Le pointeur sur l'ecran
screen_ : PSDL_Surface;
// Options du mode video
video_flags : integer;
begin
// initialisation de la SDL
if ( ( SDL_Init(SDL_INIT_VIDEO or SDL_INIT_AUDIO)= -1 ) )then begin
MessageBox(0, PChar(Format('Couldn''t initialize SDL : %s', [SDL_GetError])), 'Error', MB_OK or MB_ICONHAND);
exit;
end;
// Mettre un nom sur la fenetre
SDL_WM_SetCaption('SDL_Test 1', nil);
// Changement de la résolution de l'affichage (640x480x8)
// Si le paramètre 'fs' ou 'fullscreen' est transmis au programme
// alors passage en plein écran.
if ( ParamStr( 1 ) = '-fullscreen' ) or ( ParamStr( 1 ) = '-fs' ) then
video_flags := SDL_ANYFORMAT or SDL_SWSURFACE or SDL_HWPALETTE or SDL_FULLSCREEN
else
video_flags := SDL_ANYFORMAT or SDL_SWSURFACE or SDL_HWPALETTE;
screen_ := SDL_SetVideoMode( 640, 480, 8, video_flags );
// ... on fait quelque chose ...
// quitter SDL
SDL_Quit;
end;