Programmer en C++
SDL2 - Fond de couleur - Points

1. Une fenêtre avec un fond de couleur

Pour simplifier, reprenons le programme complet donné à la fin du chapitre précédent sur les événements.
Pour créer un fond de couleur nous devons commencer en début de programme, par déclarer un pointeur qui nous servira plus loin à désigner le rendu de la fenêtre.

SDL_Renderer *pRendu = 0;

Nous n'oublirons pas de détruire ce pointeur à la fin du programme en écrivant :

SDL_DestroyRenderer(pRendu);

Attention à l'ordre de destruction : On détruit dans l'ordre inverse de la création des pointeurs. Commme nous allons créer le rendu après avoir créé la fenêtre, il est logique de détruire le pointeur de rendu avant le pointeur de fenêtre.

Revenons maintenant au début, juste après la création de la fenêtre. le pointeur de fenêtre "pFenêtre" étant maintenant initialisé, nous l'utilisons maintenant pour initialiser le pointeur de rendu "pRendu".

pRendu = SDL_CreateRenderer(pFenetre, -1, SDL_RENDERER_ACCELERATED);

Lorsque le deuxième argument transmis est à "-1", la fonction recherche et intialise automatiquement le premier driver normalement trouvé sur votre ordinateur. Le dernier argument sera laissé à 0 sauf si votre carte graphique vous permet des performances plus rapide (ce qui est le cas de nombreux ordinateurs aujourd'hui). Dans ce cas, nous écrirons alors : "SDL_RENDERER_ACCELERATED".

Maintenant que notre programme sait dans quelle fenêtre il va travailler, et quel matériel utiliser, passons à la mise en couleur. La fonction permettant de sélectionner une couleur s'écrit :

int SDL_SetRenderDrawColor(SDL_Renderer *renderer, Uint8 red, Uint8 green, Uint8 blue, Uint8 a);

Le premier paramètre transmis sera notre pointeur de rendu. On écrira donc "pRendu". Les arguments suivants qui seront transmis seront dans l'ordre : le rouge (red), le vert (green), et le bleu (blue). Chaque couleur sera représentée par un entier de 0 à 255 (8 bits max). 0 étant l'absence de couleur, et 255 la couleur au maximum de son intensité. Le dernier argument fourni est la transparence de 0 à 255 également. 255 représente une couleur totalement opaque.
Par exemple, si je désire que le fond de ma fenêtre soit d'une couleur orangée très claire, je vais écrire :

SDL_SetRenderDrawColor(pRendu, 255, 230, 100, 255);

Nous avons choisi la couleur de la fenêtre, il nous reste maintenant à appliquer cette couleur à toute la fenêtre, ce qui se fait avec :

SDL_RenderClear(pRendu);

En fait cette fonction efface le contenu de la fenêtre en appliquant la couleur choisie sur toute sa surface.
Il nous faudra une dernière étape pour voir notre jolie fenêtre en couleur. C'est l'actualisation de la fenêtre qui se fait avec :

SDL_RenderPresent(pRendu);

Voilà c'est terminé, si vos 6 lignes de codes ont été ajoutées aux bons endroits, vous devriez obtenir ceci :

2. Dessiner des points dans une fenêtre

Placer des points dans une fenêtre se fait en utilisant une structure SDL_Point, dont les variables membres x et y représentent deux entiers. L'origine du repère permettant le positionnement de ces points se situe en haut et à gauche de la fenêtre. Ox est orienté vers la droite, et Oy vers le bas (l'inverse de ce qui se pratique en mathématiques).
Avec cette structure, un point est déclaré de la façon suivante :

SDL_Point monPoint;     // Declaration d'un point

Dans une structure, les variables membres sont publiques, ce qui permet une initialisation directe :

monPoint.x = 10;
monPoint.y = 20;

A noter qu'il est aussi possible de déclarer une variable SDL_Point, et de l'initialiser en même temps comme ceci :

SDL_Point monPoint = {10, 20};

La couleur du point se choisit de la même façon que celle de la fenêtre. C'est la même fonction. Ainsi pour une couleur noire, juste avant de dessiner le point, nous écrirons :

SDL_SetRenderDrawColor(pRendu, 0, 0, 0, 255);

Le choix de la position étant fait, et la couleur choisie, il nous reste plus qu'à le dessiner avec la fonction :

SDL_RenderDrawPoint(pRendu, monPoint.x, monPoint.y};

A noter qu'il est possible de dessiner un point directement avec cette fonction sans forcément passer par une structure SDL_Point. On donne alors directement dans les deux derniers arguments, les valeurs des coordonnées x, et y.
Attention, le point n'apparaitra qu'après l'actualisation de la fenêtre à l'aide de la fonction SDL_RenderPresent(). Le code permettant de dessiner le point doit donc impérativement se trouver avant l'actualisation.