wiki:InsiaProgCTp6

Sommaire

TP6 - Programmation graphique avec SDL

La bibliothèque SDL permet de programmer facilement et de manière portable (GNU/Linux, Windows, Mac, etc.) les sorties graphique et son d'un ordinateur, ainsi que les périphériques d'entrée divers (clavier, souris, joystick...). Elle est très souvent utilisée pour réaliser des jeux vidéo ou des programmes multimedia.

Documentation en français de SDL

1. Initialisation

A l'aide des fonctions SDL_Init() et SDL_SetVideoMode(), initialisez la bibliothèque SDL et créez une fenêtre de 500 par 500 pixels en utilisant le format de pixel courant à l'écran (paramètre bpp). Empêchez l'arrêt immédiat du programme avec par exemple getchar() pour avoir le temps de constater l'apparition de la fenêtre.

Explorez les valeurs de la structure SDL_Surface que vous avez obtenue (voir /usr/include/SDL/SDL_video.h) à l'aide de printf() ou du debugger.

2. Affichage

La représentation en mémoire des pixels d'une image se présente ligne par ligne. Le pointeur pixels désigne en particulier la première ligne:

  • Chaque ligne est un simple vecteur de pixels, où le format du pixel dépend du paramètre bpp. Dans la majorité des cas, sur une machine moderne, un pixel occupera 32 bits dont seuls les 24 premiers sont utilisés (8 par composante rouge, vert, bleu). Utilisez le type uint32_t défini dans stdint.h.
  • Les adresses de chaque ligne sont séparées de SDL_surface.pitch octets: il n'est pas rare que cette valeur soit légèrement supérieure à largeur * bpp, pour des questions d'alignement de mémoire.

Déduisez de ces informations une fonction set_pixel(SDL_Surface* surface, int x, int y, uint32_t pixel) qui permet d'afficher un pixel aux coordonnées x,y. La convention standard est d'avoir le point 0,0 en haut à gauche de la fenêtre. N'oubliez pas d'appeler SDL_FLip() ou SDL_UpdateRect() suivant les modalités d'initialisation de votre fenêtre.

Quelles sont les valeurs en hexadécimal qui permetttent d'afficher les couleurs suivantes:

  • rouge vif
  • vert vif
  • bleu vif

3. Evénements

Remplacez la fin de votre programme (mise en attente) par une boucle infinie qui récupère les événements avec SDL_WaitEvent().Affichez en détail les événements de type SDL_KEYDOWN/UP, SDL_MOUSEMOTION et SDL_MOUSEBUTTONDOWN/UP.

Modifiez votre programme pour pouvoir dessiner naturellement à la souris (impression de la trace du pointeur sur la fenêtre lorsque le bouton gauche est enfoncé). Fournissez des couleurs prédéfinies sélectionnables par un simple appui sur une touche.

Last modified 14 years ago Last modified on Dec 4, 2006, 10:56:52 AM