Qu'est ce qu'un renderer et à quoi sert-il ?
En SDL 1:
Avant la SDL1 utilisait les SDL_Surface, en gros des images rendues en mémoire CPU, à la charge du CPU. Il fallait construire un contexte OpenGL par exemple pour accéder au rendu GPU.
En SDL 2:
Apparu en SDL2, le renderer permet (en gros) d'accéder à la carte graphique, il permet avec les SDL_Texture de traiter des images rendues en mémoire GPU, à la charge de la carte graphique.
// Création de la fenêtre
SDL_Window* window = SDL_CreateWindow("Ma fenêtre SDL", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0);
if (window == nullptr) {
# gestion d'erreur
}
// Création du renderer
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (renderer == nullptr) {
# gestion d'erreur
}
on utilise le renderer, pour chaque tracé graphique :
// Dessin d'une ligne rouge
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
SDL_RenderDrawLine(renderer, 50, 50, 300, 300);
// Affichage du rendu
SDL_RenderPresent(renderer);
En coulisse, le renderer permet d'accéder à des primitives OpenGL pour des tracés GPU.
En SDL3:
Le renderer a été lui aussi modernisé. On ne l'initialise pas de la même façon.
// Création de la fenêtre
SDL_Window* window = SDL_CreateWindow("Ma fenêtre SDL3", 640, 480, 0);
if (window == nullptr) {
# gestion d'erreur
}
// Création du renderer
SDL_Renderer* renderer = SDL_CreateRenderer(window, nullptr);
if (renderer == nullptr) {
# gestion d'erreur
}
On a même une version plus courte (comme en SDL2):
if (!SDL_CreateWindowAndRenderer("La SD3", 320, 240, SDL_WINDOW_RESIZABLE, &window, &renderer)) {
# gestion des erreurs
}
Lorsque l'on utilise SDL_CreateRenderer, le second paramètre permet de nommer le renderer que l'on veut utiliser. Avec la SDL3, on peut utiliser d'autres rendus comme Vulkan ou DX12 mais cela dépasse le cadre de cet article.
Pour plus de renseignements sur l'usage d'un GPU moderne, cliquez ici