Aller au contenu

SDL2.x/Le renderer

Leçons de niveau 14
Une page de Wikiversité, la communauté pédagogique libre.
Début de la boite de navigation du chapitre
Le renderer
Icône de la faculté
Chapitre no 4
Leçon : SDL2.x
Chap. préc. :Les fenêtres
Chap. suiv. :Les textures
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « SDL2.x : Le renderer
SDL2.x/Le renderer
 », n'a pu être restituée correctement ci-dessus.

Un renderer permet de rendre des primitives de manière optimale grâce à la nouvelle API apparue dans la version 2 de la SDL.

La fonction SDL_CreateWindowAndRenderer() permet d'ouvrir une fenêtre et d'initialiser un renderer associé:

#include <stdio.h>
#include <stdlib.h>
#include <SDL2/SDL.h>
 
int main (int argc , char *argv[])
{
    SDL_Window *window;
    SDL_Renderer *renderer;

    // initalisation
    SDL_Init(SDL_INIT_VIDEO);

    // création d'une fenêtre et d'un renderer
    SDL_CreateWindowAndRenderer(
            320, 240,
            SDL_WINDOW_RESIZABLE,
            &window, &renderer);

    // attendre 3 secondes
    SDL_Delay(3000);

    return 0;
}


Utilisons maintenant la fonction SDL_RenderDrawLine() pour dessiner une série de lignes aléatoires:

#include <stdio.h>
#include <stdlib.h>
#include <time.h> 
#include <SDL2/SDL.h>

#define WIDTH 640
#define HEIGHT 480

int main (int argc , char *argv[])
{
    SDL_Window *window;
    SDL_Renderer *renderer;
    int i, j;
    Uint8 r, g, b, a;
    int pax, pay, pbx, pby;

    // initalisation
    SDL_Init(SDL_INIT_VIDEO);

    // Utilisons le temps actuel pour initialiser
    // le générateur de nombre aléatoire  
    srand(time(0)); 

    // création d'une fenêtre et d'un renderer
    SDL_CreateWindowAndRenderer(
            WIDTH, HEIGHT,
            SDL_WINDOW_RESIZABLE,
            &window, &renderer);

    for (i = 0; i < 36; i++) {
        // définir une couleur aléatoire
        r = rand() % 255;
        g = rand() % 255;
        b = rand() % 255;

        SDL_SetRenderDrawColor(
                renderer, r, g, b, 255);

        for (j = 0; j < 22; j++) {
            // définir 2 points aléatoires
            pax = rand() % WIDTH;
            pay = rand() % HEIGHT;
            pbx = rand() % WIDTH;
            pby = rand() % HEIGHT;

            // dessiner une ligne
            SDL_RenderDrawLine(
                    renderer,
                    pax, pay,
                    pbx, pby);
        }
        SDL_RenderPresent(renderer);
        SDL_Delay(160);
    }
    return 0;
}


Aller lire la documentation de l’API du module renderer.