SED-P.NET

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 :

ValeurDescription
SDL_INIT_TIMERFonction timer
SDL_INIT_AUDIOgestion du son
SDL_INIT_VIDEOaffichage video
SDL_INIT_CDROMlecture audio sur cdrom
SDL_INIT_JOYSTICKgerer les joystick
SDL_INIT_EVERYTHINGtous les système précédents
SDL_INIT_NOPARACHUTEla SDL ne bloque pas les signaux d’erreurs fatales
SDL_INIT_EVENTTHREADEvenements 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 :

ValeurDescription
SDL_SWSURFACEutiliser la mémoire système
SDL_HWSURFACEutiliser la mémoire vidéo
SDL_ASYNCBLITutiliser un affichage asynchrone
SDL_ANYFORMATutiliser un autre format si celui désiré n’est pas possible
SDL_HWPALETTELa SDL aura un accès exclusif à la palette des couleurs
SDL_DOUBLEBUFPermet d’utiliser deux buffers et de faire des ’SDL_Flip’ pour modifier l’affichage
SDL_FULLSCREENpassage en plein écran
SDL_OPENGLCréation d’un contexte OpenGL
SDL_OPENGLBLITCréation d’un contexte OpenGL + permettre affichage normal
SDL_RESIZABLELa fenêtre pourra changer de taille
SDL_NOFRAMELa 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;

Répondre à cet article