cegdd Posté(e) April 25, 2014 Signaler Share Posté(e) April 25, 2014 (modifié) 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. int SDL_Init(Uint32 flags) 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. SDL_Window* SDL_CreateWindow(const char* title, int x, int y, int w, int h, Uint32 flags) 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). SDL_Renderer* SDL_CreateRenderer(SDL_Window* window, int index, Uint32 flags) 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 void SDL_RenderPresent(SDL_Renderer* renderer) 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 void SDL_Delay(Uint32 ms) paramètre: le nombre de milisecondes SDL_Quit(); fonction qui ferme la sdl void SDL_Quit(void) explication : si vous lancez ce code, vous devriez avoir une fenêtre noire pendant 2 secondes. c'est tout à fait normal. à bientôt Modifié August 4, 2014 par cegdd 8 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Azad Posté(e) April 26, 2014 Signaler Share Posté(e) April 26, 2014 Très très bon tutoriel, titre modifié à ta demande. +1 point de rep. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Azad Posté(e) April 26, 2014 Signaler Share Posté(e) April 26, 2014 Message automatiqueLe sujet a été déplacé de « Informatique → Autres / Divers / Découvertes » to « Programmation → C ». Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Droby Posté(e) April 26, 2014 Signaler Share Posté(e) April 26, 2014 Dès que j'ai du temps j'essaye la SDL (not sql*) 2.0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Azad Posté(e) April 29, 2014 Signaler Share Posté(e) April 29, 2014 J'ai toujours utilisé la version précédente, il serait temps que je m'y mette également. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
vfrz Posté(e) May 4, 2014 Signaler Share Posté(e) May 4, 2014 Merci pour le tutoriel Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
cegdd Posté(e) May 29, 2014 Auteur Signaler Share Posté(e) May 29, 2014 (modifié) pour la suite je vais présenter comment on affiche une image, (avec transparence, échelle et rotation) mais j'aimerais éviter la gestion des événements pour le moment donc que préféré-vous ? un rayman en sprite animé qui bouge de gauche a droite de l'écran indéfiniment (https://www.youtube.com/watch?v=fTFRiKdBPec) un chronomètre a aiguille si vous avez d'autre idée ... Modifié May 29, 2014 par cegdd Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Droby Posté(e) May 30, 2014 Signaler Share Posté(e) May 30, 2014 Le rayman me semble plus marrant Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tiphedor Posté(e) May 30, 2014 Signaler Share Posté(e) May 30, 2014 La SDL c'est bien (surtout la V2), mais ça reste du bon gros bas niveau, OpenGL c'est plus rigolo ! :3 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
cegdd Posté(e) May 30, 2014 Auteur Signaler Share Posté(e) May 30, 2014 j'ai beaucoup pensé à apprendre OpenGl, mais j'ai pas trouvé assez d'arguments valable ^^ tu peux me dire ce que tu en pense ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
AlexMog Posté(e) May 31, 2014 Signaler Share Posté(e) May 31, 2014 OpenGL est encore plus bas niveau, puisque la SDL se base sur openGL. (On peut utiliser la SDL uniquement pour du fenêtrage OpenGL d'ailleurs!) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tiphedor Posté(e) May 31, 2014 Signaler Share Posté(e) May 31, 2014 Je dis c'est plus rigolo, pas dans le sens c'est plus haut niveau, j'ai trouvé ça plus sympa à utiliser, même si sdl est plus accesible quand tu commence. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
AlexMog Posté(e) May 31, 2014 Signaler Share Posté(e) May 31, 2014 Je dis c'est plus rigolo, pas dans le sens c'est plus haut niveau, j'ai trouvé ça plus sympa à utiliser, même si sdl est plus accesible quand tu commence. Je me suis mal exprimé, je veux dire qu'avec de la SDL, tu peux gérer les fenetres pour ajouter OpenGL (puisque SDL utilise OpenGL, alors tu peux appliquer OpenGL sur SDL ). OpenGL est un simple outil de calcul, ce n'est pas lui qui fait le fenetrage Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
cegdd Posté(e) May 31, 2014 Auteur Signaler Share Posté(e) May 31, 2014 et qu'est-ce qu'il m'apportera ? a part un accès plus bas niveau. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Alemort Posté(e) June 27, 2014 Signaler Share Posté(e) June 27, 2014 Très bon tutoriel pour passer de la SDL 1.2 à la SDL 2.0 Je vais lire le second. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
AlexMog Posté(e) June 30, 2014 Signaler Share Posté(e) June 30, 2014 et qu'est-ce qu'il m'apportera ? a part un accès plus bas niveau. La SDL Bypasse OpenGL pour en faire de la 2D (OpenGL permet aussi de faire de la 3D), en utilisant la SDL en temps que fenetrage, tu peux donc faire de la 3D. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.