Aller directement au contenu
  • Catégories
  • Récent
  • Mots-clés
  • Populaire
  • Web
  • Utilisateurs
  • Groupes
Habillages
  • Clair
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Sombre
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Défaut (Aucun habillage)
  • Aucun habillage
Réduire
Melinyel

Melinyel

  1. Accueil
  2. Programmation
  3. Développement de logiciels
  4. C
  5. [TUTO] SDL 2.0

[TUTO] SDL 2.0

Planifié Épinglé Verrouillé Déplacé C
16 Messages 7 Publieurs 11.0k Vues
  • Du plus ancien au plus récent
  • Du plus récent au plus ancien
  • Les plus votés
Répondre
  • Répondre à l'aide d'un nouveau sujet
Se connecter pour répondre
Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
  • C Hors-ligne
    C Hors-ligne
    cegdd
    a écrit sur dernière édition par
    #1

    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 :

    1. le titre de la fenêtre
    2. le point x de la fenêtre ou "SDL_WINDOWPOS_CENTERED" et "SDL_WINDOWPOS_UNDEFINED"
    3. le point y de la fenêtre ou "SDL_WINDOWPOS_CENTERED" et "SDL_WINDOWPOS_UNDEFINED"
    4. la taille horizontale de la fenêtre
    5. la taille verticale de la fenêtre
    6. 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  :huh:

    SDL_WINDOW_INPUT_FOCUS            window has input focus :huh:

    SDL_WINDOW_MOUSE_FOCUS          window has mouse focus :huh:

    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:

    1. le pointeur vers la structure SDL_Window créée précédemment.
    2. 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.
    3. 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 :

    1. 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:

    1. 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 😉

    créateur de Reconquête-Salvatrice, un petit RPG 2D en ligne multi-plateforme [OpenGL / C]

    1 réponse Dernière réponse
    8
    • AzadA Hors-ligne
      AzadA Hors-ligne
      Azad
      a écrit sur dernière édition par
      #2

      Très très bon tutoriel, titre modifié à ta demande. 🙂
      +1 point de rep.

      Administrateur du forum.

      Contactez-moi par message privé ou par mail.

      1 réponse Dernière réponse
      0
      • AzadA Hors-ligne
        AzadA Hors-ligne
        Azad
        a écrit sur dernière édition par
        #3

        Message automatique

        Le sujet a été déplacé de « [Informatique](<base_url>/index.php/forum/51-informatique/) → [Autres / Divers / Découvertes](<base_url>/index.php/forum/105-autres-divers-d%C3%A9couvertes/) » to « [Programmation](<base_url>/index.php/forum/38-programmation/) → [C](<base_url>/index.php/forum/43-c/) ».

        Administrateur du forum.

        Contactez-moi par message privé ou par mail.

        1 réponse Dernière réponse
        0
        • D Hors-ligne
          D Hors-ligne
          Droby
          a écrit sur dernière édition par
          #4

          Dès que j'ai du temps j'essaye la SDL (not sql*) 2.0 😉

          Bonne affaire ici

          1 réponse Dernière réponse
          0
          • AzadA Hors-ligne
            AzadA Hors-ligne
            Azad
            a écrit sur dernière édition par
            #5

            J'ai toujours utilisé la version précédente, il serait temps que je m'y mette également. 🙂

            Administrateur du forum.

            Contactez-moi par message privé ou par mail.

            1 réponse Dernière réponse
            0
            • vfrzV Hors-ligne
              vfrzV Hors-ligne
              vfrz
              a écrit sur dernière édition par
              #6

              Merci pour le tutoriel 🙂

              hbY2yJ9.gif7CNtQh6.gif

              1 réponse Dernière réponse
              0
              • C Hors-ligne
                C Hors-ligne
                cegdd
                a écrit sur dernière édition par
                #7

                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 ...

                créateur de Reconquête-Salvatrice, un petit RPG 2D en ligne multi-plateforme [OpenGL / C]

                1 réponse Dernière réponse
                0
                • D Hors-ligne
                  D Hors-ligne
                  Droby
                  a écrit sur dernière édition par
                  #8

                  Le rayman me semble plus marrant 🙂

                  Bonne affaire ici

                  1 réponse Dernière réponse
                  0
                  • TiphedorT Hors-ligne
                    TiphedorT Hors-ligne
                    Tiphedor
                    Membre d'honneur
                    a écrit sur dernière édition par
                    #9

                    La SDL c'est bien (surtout la V2), mais ça reste du bon gros bas niveau, OpenGL c'est plus rigolo ! :3

                    Fork my bullshit : <http://git.tiphedor.fr/public/projects>

                    1 réponse Dernière réponse
                    0
                    • C Hors-ligne
                      C Hors-ligne
                      cegdd
                      a écrit sur dernière édition par
                      #10

                      j'ai beaucoup pensé à apprendre OpenGl, mais j'ai pas trouvé assez d'arguments valable ^^

                      tu peux me dire ce que tu en pense ?

                      créateur de Reconquête-Salvatrice, un petit RPG 2D en ligne multi-plateforme [OpenGL / C]

                      1 réponse Dernière réponse
                      0
                      • AlexMogA Hors-ligne
                        AlexMogA Hors-ligne
                        AlexMog
                        Modérateur spécialisé
                        a écrit sur dernière édition par
                        #11

                        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!)

                        Multiplayer GameDev @ Unexpected

                        Mon CV

                        1 réponse Dernière réponse
                        0
                        • TiphedorT Hors-ligne
                          TiphedorT Hors-ligne
                          Tiphedor
                          Membre d'honneur
                          a écrit sur dernière édition par
                          #12

                          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.

                          Fork my bullshit : <http://git.tiphedor.fr/public/projects>

                          1 réponse Dernière réponse
                          0
                          • AlexMogA Hors-ligne
                            AlexMogA Hors-ligne
                            AlexMog
                            Modérateur spécialisé
                            a écrit sur dernière édition par
                            #13

                            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 😉

                            Multiplayer GameDev @ Unexpected

                            Mon CV

                            1 réponse Dernière réponse
                            0
                            • C Hors-ligne
                              C Hors-ligne
                              cegdd
                              a écrit sur dernière édition par
                              #14

                              et qu'est-ce qu'il m'apportera ? a part un accès plus bas niveau.

                              créateur de Reconquête-Salvatrice, un petit RPG 2D en ligne multi-plateforme [OpenGL / C]

                              1 réponse Dernière réponse
                              0
                              • AlemortA Hors-ligne
                                AlemortA Hors-ligne
                                Alemort
                                a écrit sur dernière édition par
                                #15

                                Très bon tutoriel pour passer de la SDL 1.2 à la SDL 2.0 🙂

                                Je vais lire le second.

                                1 réponse Dernière réponse
                                0
                                • AlexMogA Hors-ligne
                                  AlexMogA Hors-ligne
                                  AlexMog
                                  Modérateur spécialisé
                                  a écrit sur dernière édition par
                                  #16

                                  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.

                                  Multiplayer GameDev @ Unexpected

                                  Mon CV

                                  1 réponse Dernière réponse
                                  0

                                  Bonjour ! Vous semblez intéressé par cette conversation, mais vous n’avez pas encore de compte.

                                  Marre de refaire défiler les mêmes messages ? Créez un compte pour retrouver votre position, recevoir des notifications des nouvelles réponses, sauvegarder vos favoris et voter pour les messages que vous appréciez.

                                  Grâce à votre participation, ce message peut devenir encore meilleur 💗

                                  S'inscrire Se connecter
                                  Répondre
                                  • Répondre à l'aide d'un nouveau sujet
                                  Se connecter pour répondre
                                  • Du plus ancien au plus récent
                                  • Du plus récent au plus ancien
                                  • Les plus votés


                                  • Se connecter

                                  • Connectez-vous ou inscrivez-vous pour faire une recherche.
                                  Powered by NodeBB Contributors
                                  • Premier message
                                    Dernier message
                                  0
                                  • Catégories
                                  • Récent
                                  • Mots-clés
                                  • Populaire
                                  • Web
                                  • Utilisateurs
                                  • Groupes