Ma première fenêtre SDL

fenetre SDL

Choix du mode vidéo

Le mode vidéo est un terme désignant les options à donner à la fenêtre (taille, couleurs …).
Pour choisir ces options, on utilisera la commande :

SDL_SetVideoMode()

Elle prend quatre paramètres :
-La largeur de la fenêtre en pixels
-La hauteur de la fenêtre en pixels
-Le nombre de couleurs affichables en bits/pixel
-Des options supplémentaires

Pour les couleurs, nous utiliserons le plus souvent 32 bits/pixel, la valeur la plus courante, même si sur certains ordinateurs on peut désormais aller jusqu'à 64 bits/pixel. Il est bien sûr possible de diminuer ce nombre de couleurs à 16 ou même 8 bits/pixel.
Pour ce qui est des options supplémentaires, voici celles que vous pouvez utiliser, combinables grâce au symbole | :

Nom Description
SDL_HWSURFACE Les données seront chargées dans la mémoire vidéo, c'est-à-dire dans la mémoire de votre carte 3D. L'avantage est que cette mémoire est plus rapide, l'inconvénient étant qu'il y a en général moins d'espace dans cette mémoire que dans l'autre.
SDL_SWSURFACE Les données seront chargées dans la mémoire système (c'est-à-dire la RAM). L'avantage est qu'il y a plein de place dans cette mémoire, le défaut étant qu'elle est moins rapide et donc moins optimisée.
SDL_RESIZABLE La fenêtre sera redimensionnable. Par défaut elle ne l'est pas.
SDL_NOFRAME La fenêtre n'aura pas de barre de titre ni de bordure (attention à prévoir un moyen de la fermer).
SDL_FULLSCREEN La fenêtre sera en mode plein écran. Dans ce mode, aucune autre fenêtre n'est visible, votre programme prenant toute la place à l'écran, en changeant automatiquement la résolution de votre écran si besoin est.
SDL_DOUBLEBUF Mode double Buffering. C'est une technique très utilisée dans les jeux 2D qui permet de faire en sorte que les déplacements des objets à l'écran soient fluides (dans le cas contraire, ça scintille et c'est moche). Nous vous expliquerons les détails cette technique plus loin.
Par exemple, vous pouvez prendre cette ligne de code :
SDL_SetVideoMode (400, 300, 32, SDL_HWSURFACE | SDL_RESIZABLE);
Cela ouvrira une fenêtre redimensionnable de taille initiale 400*300 avec 32 bits/pixel pour les couleurs et dans la mémoire vidéo rapide.
Testons le code avec cette commande. Nous avons volontairement augmenté la taille de l'affichage pour que vous puissiez voir ce qu'il se produit.
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>

int main(int argc, char * argv[]) {
SDL_Init(SDL_INIT_VIDEO);
SDL_SetVideoMode(680,480,32,SDL_HWSURFACE | SDL_RESIZABLE);

SDL_Quit();

return EXIT_SUCCESS;
}
Compilez et lancez ce programme. Que se passe-t-il ?
Vous voyez une fenêtre apparaître et disparaître quasiment immédiatement. En effet, la fonction SDL_SetVideoMode est immédiatement suivie de SDL_Quit, donc tout s'arrête immédiatement.

Garder la fenêtre à l’écran : mettre en pause le programme

Le principe pour mettre en pause le programme, c'est la boucle infinie (Vous savez, celle qu'on vous a interdite de faire en cours). Et bien c'est celle-ci que vous devrez utiliser pour que l'affichage soit continu, sans oublier qu'il faut pouvoir en sortir sans avoir à passer par le gestionnaire des taches (ou tuer le processus sous Unix). Nous allons vous donner une fonction pause() dont nous ne vous expliquerons pas le code, vous la comprendrez de vous-même plus loin. Elle sera juste là pour éviter de faire une boucle infinie trop compliquée à stopper.
Voici le code de la fonction pause() :

void pause() {
int continuer = 1;
SDL_Event event;
while(continuer) {
SDL_WaitEvent(&event);
switch(event.type){
Case SDL_QUIT: continuer=0;
}
}
}
La boucle pause() permet de quitter lorsque vous cliquerez sur la croix en haut à gauche. Maintenant votre programme devrait ressembler à ceci :
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>

void pause();
int main(int argc, char * argv[]) {
SDL_Init(SDL_INIT_VIDEO); // Initialisation de la SDL
SDL_SetVideoMode (640, 480, 32, SDL_HWSURFACE); // Ouverture de la fenêtre
pause(); // Mise en pause du programme
SDL_Quit(); // Arrêt de la SDL
return EXIT_SUCCESS; // Fermeture du programme
}
La fonction pause sera ajoutée en dessous du code précédent, ou dans un fichier fonction.cpp si vous voulez faire un code propre (sans oublier d'ajouter un fonction.h dans le code de votre main).
Lancez votre programme.
Vous y êtes enfin arrivé, une fenêtre noire s'affiche sur votre écran et doit quitter quand vous cliquez sur la croix rouge.

Autre recommandation

Attention au mode plein écran (SDL_FULLSCREEN) et au mode sans bordure (SDL_NOFRAME). Comme il n'y a pas de barre de titre dans ces 2 modes, vous ne pourrez pas fermer le programme et vous serez alors obligés d'utiliser la commande Ctrl+Alt+Suppr.
Attendez quelques chapitres pour apprendre à manipuler les évènements SDL et pouvoir alors coder un moyen de sortir de votre programme avec une technique un peu moins barbare que le Ctrl+Alt+Suppr.

Choisir le titre de ma fenêtre

Si vous avez regardé le titre de la fenêtre de votre programme, vous devez vous être demandé comment changer ce "SDL_app" en un autre nom un peu mieux. Vous utiliserez la fonction suivante : SDL_WM_SetCaption(). Elle prend 2 paramètres, le premier correspondant au titre de la fenêtre, le second au titre que vous voulez donner à l'icône. Nous ne nous intéresseront pas au titre de l'icône, car il ne fonctionne que sous certains OS. Vous pouvez donc reprendre le même main() qu'auparavant en ajoutant la fonction.

int main(int argc, char * argv[]) {
SDL_Init(SDL_INIT_VIDEO);
SDL_SetVideoMode (640, 480, 32, SDL_HWSURFACE);
SDL_WM_SetCaption ("Ma fenêtre SDL", NULL);
pause ();
SDL_Quit ();
return EXIT_SUCCESS;
}

Créer un site gratuit avec e-monsite - Signaler un contenu illicite sur ce site

×