Bonjour à tous,
Ce tuto a pour but de vous apprendre les bases de la bibliotheque SDL,
et plus précisément la 2.0.
Les exemples de codes seront rédigés en C car c'est le language dans lequel est écris la SDL,
bien que la SDL suporte le C++ et dispose de bindings pour le C#, le Pascal et le Python.
j'imagine donc que vous maitrisez votre langage pour la suite.
Code minimal
Pour tester l'installation et expliquer les premières fonctions voici un code de base.
int main (int argc, char *argv[])
{
SDL_Init (SDL_INIT_VIDEO);
SDL_Window *screen;
SDL_Renderer *renderer;
screen = SDL_CreateWindow("tuto", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_RESIZABLE);
renderer = SDL_CreateRenderer(screen, -1, SDL_RENDERER_ACCELERATED);
SDL_RenderPresent(renderer);
SDL_Delay(2000);
SDL_Quit();
return 0;
}
SDL_Init (SDL_INIT_VIDEO);
Fonction initialisant la sdl.
retour :
retourne une valeur négative en cas d'erreur.
paramètres :
SDL_INIT_TIMER sous-système temps
SDL_INIT_AUDIO sous-système audio
SDL_INIT_VIDEO sous-système video
SDL_INIT_JOYSTICK sous-système pour joystick
SDL_INIT_HAPTIC sous-système pour le tactile
SDL_INIT_GAMECONTROLLER sous-système mannette de jeu
SDL_INIT_EVENTS sous-système pour les évènement
SDL_INIT_EVERYTHING tout les sous-système au dessus
SDL_INIT_NOPARACHUTE ne prend pas en compte les signaux comme SIGSEGV SIGPIPE etc DANGEREUX
SDL_CreateWindow("tuto", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_RESIZABLE);
fonction créant la fenêtre de notre programme.
retour :
retourne un pointeur vers la structure "SDL_Window" nouvellement créée.
paramètres :
le titre de la fenêtre
le point x de la fenêtre ou "SDL_WINDOWPOS_CENTERED" et "SDL_WINDOWPOS_UNDEFINED"
le point y de la fenêtre ou "SDL_WINDOWPOS_CENTERED" et "SDL_WINDOWPOS_UNDEFINED"
la taille horizontale de la fenêtre
la taille verticale de la fenêtre
encore des flags que voici :
SDL_WINDOW_FULLSCREEN plein écran
SDL_WINDOW_FULLSCREEN_DESKTOP plein écran a la résolution du bureau
SDL_WINDOW_OPENGL fenêtre de contexte pour OpenGL
SDL_WINDOW_SHOWN fenêtre visible
SDL_WINDOW_HIDDEN fenêtre invisible
SDL_WINDOW_BORDERLESS fenêtre sans contour
SDL_WINDOW_RESIZABLE fenêtre redimensionnable
SDL_WINDOW_MINIMIZED fenêtre minimisée
SDL_WINDOW_MAXIMIZED fenêtre agrandie
SDL_WINDOW_INPUT_GRABBED window has grabbed input focus
SDL_WINDOW_INPUT_FOCUS window has input focus
SDL_WINDOW_MOUSE_FOCUS window has mouse focus
SDL_WINDOW_FOREIGN pas de fenêtre
SDL_WINDOW_ALLOW_HIGHDPI fenêtre en mode High-DPI (SDL2.0.1 ou plus)
SDL_CreateRenderer(screen, -1, SDL_RENDERER_ACCELERATED);
Créer un renderer (le renderer est la vue, la surface que l'on va afficher à l'écran).
retour :
retourne un pointeur vers la structure "SDL_Renderer" nouvellement créée.
paramètres:
le pointeur vers la structure SDL_Window créée précédemment.
j'aurais aimé vous expliquer mais malheureusement aucune doc ou tuto n'est clair là dessus du coup, ne vous en occupez pas et donnez -1 comme argument.
ce sont encore des flags, vous pouvez en mettre plusieurs.
SDL_RENDERER_SOFTWARE rendu calculé par le CPU
SDL_RENDERER_ACCELERATED rendu calculé par le GPU (grosse nouveauté de la SDL2.0)
SDL_RENDERER_PRESENTVSYNC rendu synchronisé avec le taux de rafraichissement de votre écran
SDL_RENDERER_TARGETTEXTURE rendu pour texture
SDL_RenderPresent(renderer);
fonction affichant le rendu sur l'écran
paramètre :
le pointeur vers la structure SDL_Renderer créée précédemment.
SDL_Delay(2000);
fonction qui met le programme en pause pendant x milisecondes
paramètre:
le nombre de milisecondes
SDL_Quit();
fonction qui ferme la sdl
explication :
si vous lancez ce code, vous devriez avoir une fenêtre noire pendant 2 secondes.
c'est tout à fait normal.
à bientôt