Les fonctions d'initialisation d'Allegro
Un article de Mangue.org, l'encyclopéde libre.
Avant notre premier programme utilisant allegro, il va nous falloir apprendre un certain nombre de fonctions d'initialisation indispensables à Allegro, qui seront appellées dans pratiquement tous nos prochains programmes.
| Sommaire |
install_allegro()
int install_allegro(int system_id, int *errno_ptr, int (*atexit_ptr)());
Cette fonction permet d'initialiser Allegro dans nos programmes. En effet, elle permet d'initialiser un certain nombre de variables à l'intérieur même de la librairie Allegro, comme par exemple paramétrer le système d'exploitation, ce qui permet par la suite à Allegro de gérer l'affichage, car celui-ci est géré différemment par les divers systémes d'exploitation existants. il nous faudra appeler cette fonction dans nos programmes avant d'utiliser les autres fonctions de la librairie Allegro.
Le premier argument de la fonction correspond au système sur lequel nos programmes vont fonctionner. Il est hautement conseillé de le mettre à SYSTEM_AUTODETECT, ainsi nous n'aurons pas à nous soucier de ce paramètre au cas de changement de plate-forme. Le second argument est un pointeur vers la variable errno, variable où sont stockés les messages d'erreur qui peuvent survenir lors de l'exécution d'un programme (par exemple, si l'on demande l'ouverture d'un fichier qui n'existe pas). Et le dernier paramètre est un pointeur vers la fonction atexit de la libc. Cette fonction est une fonction qui est automatiquement appellée lorsqu'un programme se termine.
Il est donc intéressant pour Allegro de posséder le nom de cette fonction, pour pouvoir ainsi libérer les ressources prises par Allegro automatiquement lors de la fermeture de notre programme. Ce dernier paramètre peut être NULL, à ce moment là, il ne faut pas oublier d'appeler la fonction allegro_exit à la fin du programme. Quoi qu'il arrive, cette fonction retourne 0.
Dans tous nos programmes, nous pourrons appeller install_allegro de cette manière, en étant sûr qu'il n'y aura pas de problème relatif à cette fonction par la suite :
install_allegro(SYSTEM_AUTODETECT, &errno, atexit);
allegro_exit()
void allegro_exit();
Cette fonction permet de "fermer" Allegro et d'ainsi libérer les ressources prises par Allegro, et stopper les routines de gestion de la souris, du clavier et des timer. En paramétrant correctement le dernier argument de la fonction install_allegro, nous ne seront pas obligé d'appeler la fonction allegro_exit à la fin de nos programmes.
set_gfx_mode()
int set_gfx_mode(int card, int w, int h, int v_w, int v_h);
Cette fonction est LA fonction indispensable à toutes nos futures applications graphiques (comprenez qui affichent des dessins/images à l'écran). En effet, cette fonction initialise le mode graphique dans le programme. Il est donc obligatoire de l'appeler avant d'effectuer tout affichage à l'écran (en régle générale, cette fonction est l'une des premières appellées dans les programmes). Cette fonction sert aussi à spécifier au système la résolution que nous souhaitons utiliser dans nos programmes.
Le premier argument passé à cette fonction correspond au driver de la carte graphique utilisée par l'utilisateur du jeu. Il est conseillé de mettre ce paramètre à GFX_AUTODETECT, car ainsi le driver sera choisi automatiquement, sans aucun problème. Les paramètres w et h indiquent la résolution que nous utiliserons dans le programme (par exemple 640*480, 800*600 ou 1024*768). Le paramètre w correspond à la composante largeur (width) en pixels de la résolution choisie, et le paramètre h à la composante hauteur (height) en pixels. Les paramètres v_w et v_h représentent la résolution de l'écran virtuel que nous souhaiterons utiliser dans notre programme. Mais qu'est-ce qu'un écran virtuel ? Voici un schéma :
Sur ce schéma, l'écran virtuel représenté en rouge possède une résolution de 1024 pixels de largeur sur 1024 pixels de hauteur, alors que l'écran, représenté en vert, possède une résolution de seulement 640x480 pixels.
Comme nous le voyons, l'écran virtuel est une zone mémoire où nous pourrons dessiner, dont seulement une partie est affichée à l'écran. Il nous suffit ensuite de faire un scrolling (comme les ascenseurs de windows) de l'écran pour "bouger" la zone visible de la zone mémoire. C'est ce système qui est utilisé dans les jeux de plate-forme comme Mario (lorsque nous avançons, le paysage défile : c'est en fait la zone visible qui se déplace dans la zone mémoire).
allegro_message()
void allegro_message(char *msg, ...);
Cette fonction permet d'afficher un message dans nos programmes Allegro, dans une console si le programme s'exécute en mode DOS, ou bien dans une fenêtre windows (message box) si le programme est en environnement windows. Cette fonction utilise une syntaxe similaire à la syntaxe de la fonction printf() du C (si vous ne voyez pas ce que je veux dire, vous pourrez trouver une explication dans la partie sur le langage C de ce site). Voici donc un exemple pour bien illustrer mes propos. Cet exemple va afficher "Salut nom, ca va ?" où nom est une variable de type char :
allegro_message("Salut %c, ca va ?",nom);
| Danger |
| Cette fonction doit être appelée en mode texte. Pour cela, appellz set_gfx_mode(GFX_TEXT) juste avant d'appeller allegro_message(). |
set_color_depth()
void set_color_depth(int depth);
| Danger |
| Cette fonction doit être appelée avant set_gfx_mode. |
Cette fonction permet de préciser à Allegro le nombre de couleurs utilisées par notre programme. Vous le savez sûrement, un écran ne peut pas afficher un nombre illimité de couleurs. En effet, la configuration de l'ordinateur limite ce nombre de couleurs aux valeurs détaillées ci-dessous.
Il nous faut donc choisir grâce à cette fonction le nombre de couleurs utilisées par notre programme, sachant que le mode 256 couleurs est le mode par défaut, et que les autres modes sont des modes Truecolor, qui ne nécessitent pas de palette à la différence du mode 256 couleurs.
- 8 (la valeur par défaut) : 256 couleurs
- 16 : 65536 couleurs
- 24 : 16 millions de couleurs
- 32 : 16 millions de couleurs + la composante alpha
Exemple pour passer en mode 16 bits :
set_color_depth(16);


