Vous êtes sur la page 1sur 10

REPUBLIQUE DU CAMEROUN

Paix-Travail-Patrie REPUBLIC OF CAMEROON


***** Peace-Work-Fatherland
MINISTERE DE L’ENSEIGNEMENT SUPERIEUR *****
***** MINISTRY OF HIGHER EDUCATION
UNIVERSITE DE MAROUA *****
***** THE UNIVERSITY OF MAROUA
ECOLE NETIONALE SUPERIEURE *****
POLYTECHNIQUE DE MAROUA NATIONAL ADVANCED SCHOOL OF
***** ENGINEERING OF MAROUA
DEPARTEMENT D’INFORMATIQUE ET *****
TELECOMMUNICATION DEPARTMENT OF INFORMATICS AND
***** TELECOMMUNICATION
BP : 46 MAROUA BP/P.O.Box: 46 Maroua
*****
***** Tel: (237) 22 62 03 76/ (+237) 22 62 08 PO BOX: 46 MAROUA
90 *****
Fax: (237) 22 29 31 12/ (+237) 22 29 15 41

TPE DE PROGRAMMATION C

Thème 2 : creation de fenetre et


surface avec la sdl
Rédigé par :
NOMS et PRENOMS MATRICULE
DONGMO NOUMEDEM GORAN PERSON 18A0187P
NGAPTE RAPHAEL 18A0174P

WANGBI NGAFKREO 18A0171P

KOLYANG LELA ARNAUD 18A0161P

Enseignant : Mr layie

ANNEE Académique : 2019-2020


SOMMAIRE :

I. INTRODUCTION

II. CREATION DES FENETRES avec la SDL

III. CREATION DES SURFACES avec la SDL

IV. CONCLUSION
INTRODUCTION :
La SDL c’est-à-dire la Simple Direction Layer est une bibliothèque multimédia. Elle permet un
accès de bas niveau l’audio, au clavier, a la souris, au joystick (mannettes), aux graphiques….. le
permet un accès de bas-niveau à l’audio, au clavier, à la souris, au joystick, aux graphiques… Cela
veut dire qu’elle permet d’afficher des fenêtres, d’afficher des images, de jouer des sons, de gérer le
clavier… tout au long de cet expose, notre travail consistera a la création d’une fenêtre et surface
avec la SDL. Nous travaillerons sur la SDL 1 car il existe une version avance appelle SDL 2.
I-CREATION D’UNE FENETRE AVEC LA SDL :
 Initialisation de la SDL
L’installation de la SDL et la configuration de notre projet étant déjà effectué dans d’autres thèmes,
nous pouvons enfin commencer à utiliser la SDL. Voyons d’abord le code de base que nous devrons
utiliser avec la SDL:

Pour être utilisée, la SDL doit d’abord être initialisée. Pour cela, nous devons utiliser la fonction
SDL_Init . Cette fonction doit être utilisée avant toutes les autres fonctions de la SDL car elle
charge tout ce dont les autres fonctions ont besoin pour fonctionner. Voici son prototype. int
SDL_Init(Uint32 flags) ;

Cette fonction prend en paramètre une liste de drapeaux sous la forme d’un entier, ceux-ci
correspondants aux sous-systèmes que l’on veut initialiser. La SDL est en effet composée de
plusieurs parties. Voici ses différentes parties et le drapeau à fournir pour l’initialiser.

Drapeaux Description
SDL_INIT_TIMER Initialise le système de gestion du temps
SDL_INIT_AUDIO Initialise le système de gestion de l’audio
SDL_INIT_VIDEO Initialise le système de gestion de rendu
SDL_INIT_JOYSTICK Initialise le système de gestion des joysticks
SDL_INIT_GAMECONTROLLER Initialise le système de gestion des contrôleurs
de jeux
SDL_INIT_EVENTS Initialise le système de gestion des évènements
SDL_INIT_EVERYTHING Permet de tout initialiser

Tous les drapeaux ne sont pas présents, mais nous avons la possibilité de se procurer la
documentation pour voir les autres au site officiel de la SDL.

Nous voulons faire des fenêtres, nous avons donc besoin du système de rendu de la SDL c’est-à-
dire du drapeau SDL_INIT_VIDEO.
La fonction SDL_Init permet de charger la SDL. C’est donc le point de départ d’un programme en
SDL. Aucune fonction de la SDL ne doit être utilisée avant elle. Illustration par une capture
d’écran.

 Quitter la SDL
Cependant, la fonction SDL_Init, même si nous ne savons pas comment elle fonctionne, fait
certainement quelques allocations, et il faut donc désallouer tout ça. Pour cela, la SDL nous fournit
une fonction, la fonction SDL_Quit() et le prototype est le suivant void SDL_Quit(void) ;

 Gestion des erreurs


La fonction SDL_Init renvoie une valeur :

1 en cas d'erreur

0 si tout s'est bien passé

Les valeurs 0 et 1 varient selon le o/s utilisé ; Heureusement, il y a une solution plus simple : utiliser
la sortie d'erreur standard.

Il y a une variable stderr qui est définie par stdio.h. Cette variable est automatiquement créée au
début du programme et fermée à la fin. Vous n'avez donc pas besoin de faire de fopen ou de fclose.
Du coup, vous pouvez faire un fprintf sur stderr sans utiliser fopen ou fclose.

Nous utiliserons les constantes suivantes (compris dans la bibliothèque stdlib) pour palier a ces
défauts :

EXIT_FAILURE : valeur à renvoyer en cas d'échec du programme

EXIT_SUCCESS : valeur à renvoyer en cas de réussite du programme.


 Créer des fenêtres
La première chose à faire après SDL_Init() c'est indiquer le mode vidéo que vous voulez utiliser,
c'est-à-dire la résolution, le nombre de couleurs et quelques autres options.

On va utiliser pour cela la fonction SDL_SetVideoMode() qui prend 4 paramètres :

- La largeur de la fenêtre désirée (en pixels)


- La hauteur de la fenêtre désirée (en pixels)
- Le nombre de couleurs affichables (en bits / pixel)
- Des options (des flags)

Les 2 paramètres suivants sont plus intéressants.

- Le nombre de couleurs : c'est le nombre maximal de couleurs affichables dans votre fenêtre.
- Les options : comme pour SDL_Init on doit utiliser des flags pour définir des options. Voici
les principaux flags que vous pouvez utiliser (et combiner avec le symbole "|") :

SDL_HWSURFACE : les données seront chargées dans la mémoire vidéo

SDL_SWSURFACE : les données seront chargées dans la mémoire système (c'est-à-dire la RAM à
priori). 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.

SDL_FULLSCREEN : mode plein écran.

SDL_DOUBLEBUF : mode double buffering. C'est une technique très utilisée dans les jeux 2D

Exemple : SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE); Cela ouvre une fenêtre de


taille 640*480 en 32 bits/pixel (milliards de couleurs) qui sera chargée en mémoire vidéo.

Implémentation :
Le while(1) ; c'est la boucle infinie. Comme 1 signifie vrai (rappelez-vous les booléens), la boucle
est toujours vraie et tourne en rond indéfiniment sans qu'il y ait moyen de l'arrêter car si on ne
l’avait pas fait, la fenêtre serait apparait et aussitôt disparut.
II-CREATION DE SURFACE AVEC LA SDL
Pour le moment nous avons une fenêtre avec un fond noir. C'est la fenêtre de base. Ce qu'on veut
faire, c'est la remplir.

Dans tout programme SDL, il y a au moins une surface que l'on appelle généralement ecran (ou
screen en anglais). C'est une surface qui correspond à toute la fenêtre, c'est-à-dire toute la zone
noire de la fenêtre que vous voyez.

Dans notre code source, chaque surface sera mémorisée dans une variable de type SDL_Surface.
Oui, c'est un type de variable créé par la SDL (une structure en l'occurence).

SDL_Surface *ecran = NULL;

Notons que la fonction SDL_SetVideoMode renvoie une valeur ! Elle renvoie un pointeur sur la
surface de l'écran qu'elle a créée en mémoire pour nous. on va donc pouvoir récupérer ce pointeur
dans ecran :

ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);

Voyons voir comment Colorer une surface.

En fait, il y en a 2 :

- Soit vous remplissez la surface avec une couleur unie.


- Soit vous remplissez la surface en chargeant une image.

La fonction qui permet de colorer une surface avec une couleur unie s'appelle SDL_FillRect
(FillRect = "remplir rectangle" en anglais). Elle prend 3 paramètres. Dans l'ordre :

- Un pointeur sur la surface dans laquelle on doit dessiner (par exemple ecran).
- La partie de la surface qui doit être remplie.
- La couleur à utiliser pour remplir la surface.

SDL_FillRect (surface, NULL, couleur);

La fonction SDL_MapRGB permet de remplir la surface. Elle prend 4 paramètres :

Le format des couleurs. Ce format dépend du nombre de bits / pixel que vous avez demandé avec
SDL_SetVideoMode.

- La quantité de rouge de la couleur


- La quantité de vert de la couleur
- La quantité de bleu de la couleur

SDL_MapRGB(ecran->format, 255, 0, 0) ;

Toutefois il manque encore une petite chose : demander la mise à jour de l'écran. En effet,
l'instruction SDL_FillRect colorie bien l'écran mais cela ne se fait que dans la mémoire. Il faut
ensuite demander à l'ordinateur de mettre à jour l'écran avec les nouvelles données.

Pour cela, on va utiliser la fonction SDL_Flip.


SDL_Flip(ecran);

On resume!

Voici une fonction main() qui crée une fenêtre avec un fond bleu-vert :
CONCLUSION :
Tout au long de c’est expose, il était question pour nous de présenter la création d’une fenêtre et
d’une surface avec la SDL. Nous pouvons ressortir de cela que la création d’une fenêtre et surface
est chose facile lorsqu’on connait les différentes fonctions qu’elle confère. Cependant nous nous
posons la question de savoir les limites de la SDL.

Vous aimerez peut-être aussi