Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse

NodeBB

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

[TUTO] SDL 2.0

Scheduled Pinned Locked Moved C
16 Posts 7 Posters 11.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C
    C
    cegdd
    wrote on last edited by
    #1

    <p><span style="font-size:18px;">Bonjour à tous,</span></p>
    <p> </p>
    <p>Ce tuto a pour but de vous apprendre les bases de la bibliotheque SDL,</p>
    <p> </p>
    <p>et plus précisément la <strong>2.0</strong>.</p>
    <p> </p>
    <p>Les exemples de codes seront rédigés en C car c'est le language dans lequel est écris la SDL,</p>
    <p> </p>
    <p>bien que la SDL suporte le C++ et dispose de bindings pour le C#, <span style="font-size:14px;">le Pascal et le Python.</span></p>
    <p></p><p><strong><u>j'imagine donc que vous maitrisez votre langage pour la suite.</u></strong></p>
    <p> </p>
    <p><strong><span style="color:#0000cd;"><u><span style="font-size:24px;">Code minimal</span></u></span></strong></p>
    <p> </p>
    <p>Pour tester l'installation et expliquer les premières fonctions voici un code de base.</p>
    <pre class="ipsCode prettyprint">
    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;
    

    }

    </pre>
    <p><strong><span style="color:#ff0000;">SDL_Init (SDL_INIT_VIDEO);</span></strong></p>
    <p>Fonction initialisant la sdl.</p>
    <blockquote class="ipsQuote" data-ipsquote=""><div>
    <p><span><span>int</span> <span>SDL_Init</span><span>(</span><span>Uint32</span> <span>flags</span><span>)</span></span></p>
    </div></blockquote>
    <p><strong><u>retour :</u></strong></p>
    <p><span><span>retourne une valeur négative en cas d'erreur.</span></span></p>
    <p> </p>
    <p><u><strong>paramètres :</strong></u></p>
    <p><strong>SDL_INIT_TIMER</strong>                           sous-système temps</p>
    <p><strong>SDL_INIT_AUDIO</strong>                          sous-système audio</p>
    <p><strong>SDL_INIT_VIDEO</strong>                          sous-système video</p>
    <p><strong>SDL_INIT_JOYSTICK</strong>                    sous-système pour joystick</p>
    <p><strong>SDL_INIT_HAPTIC</strong>                        sous-système pour le tactile</p>
    <p><strong>SDL_INIT_GAMECONTROLLER</strong>    sous-système mannette de jeu</p>
    <p><strong>SDL_INIT_EVENTS</strong>                       sous-système pour les évènement</p>
    <p><strong>SDL_INIT_EVERYTHING</strong>               tout les sous-système au dessus</p>
    <p><strong>SDL_INIT_NOPARACHUTE</strong>           ne prend pas en compte les signaux comme SIGSEGV SIGPIPE etc <strong><span style="color:#000000;">DANGEREUX </span></strong></p>
    <p> </p>
    <p><strong><span style="color:#ff0000;">SDL_CreateWindow("tuto", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_RESIZABLE);</span></strong></p>
    <p>fonction créant la fenêtre de notre programme.</p>
    <blockquote class="ipsQuote" data-ipsquote=""><div>
    <p><span><span>SDL_Window</span><span></span> <span>SDL_CreateWindow</span><span>(</span><span>const</span> <span>char</span><span></span> <span>title</span><span>, </span></span><span><span>int</span> <span>x</span><span>,</span></span><span><span> int</span> <span>y</span><span>, </span></span><span><span>int</span> <span>w</span><span>, </span></span><span><span>int</span> <span>h</span><span>,</span></span><span><span> Uint32</span> <span>flags</span><span>)</span></span></p>
    </div></blockquote>
    <p> </p>
    <p><strong><u>retour :</u></strong></p>
    <p>retourne un pointeur vers la structure <span><span>"SDL_Window</span></span>" nouvellement créée.</p>
    <p> </p>
    <p><u><strong>paramètres :</strong></u></p>
    <ol><li>le titre de la fenêtre</li>
    <li>le point x de la fenêtre ou "SDL_WINDOWPOS_CENTERED" et "SDL_WINDOWPOS_UNDEFINED"</li>
    <li>le point y de la fenêtre ou "SDL_WINDOWPOS_CENTERED" et "SDL_WINDOWPOS_UNDEFINED"</li>
    <li>la taille horizontale de la fenêtre</li>
    <li>la taille verticale de la fenêtre</li>
    <li>encore des flags que voici :</li>
    </ol><p><span> </span><strong>SDL_WINDOW_FULLSCREEN</strong><span>                      </span>plein écran</p>
    <p><span> </span><strong>SDL_WINDOW_FULLSCREEN_DESKTOP</strong><span>     </span>plein écran a la résolution du bureau</p>
    <p><span> </span><strong>SDL_WINDOW_OPENGL</strong><span>                               fenêtre de contexte pour OpenGL</span></p>
    <p><span> </span><strong>SDL_WINDOW_SHOWN</strong><span>                                fenêtre visible</span></p>
    <p><span> </span><strong>SDL_WINDOW_HIDDEN</strong><span>                                fenêtre invisible</span></p>
    <p><span> </span><strong>SDL_WINDOW_BORDERLESS</strong><span>                      </span>fenêtre sans contour</p>
    <p><span> </span><strong>SDL_WINDOW_RESIZABLE</strong><span>                           fenêtre redimensionnable</span></p>
    <p><span> </span><strong>SDL_WINDOW_MINIMIZED</strong><span>                             </span><span>fenêtre minimisée</span></p>
    <p><span> </span><strong>SDL_WINDOW_MAXIMIZED</strong><span>                            </span><span>fenêtre agrandie</span></p>
    <p><span> </span><strong>SDL_WINDOW_INPUT_GRABBED</strong><span>       </span>window has grabbed input focus  :huh: </p>
    <p><span> </span><strong>SDL_WINDOW_INPUT_FOCUS</strong><span>            </span>window has input focus :huh: </p>
    <p><span> </span><strong>SDL_WINDOW_MOUSE_FOCUS</strong><span>          </span>window has mouse focus :huh: </p>
    <p><strong>SDL_WINDOW_FOREIGN</strong>                               pas de fenêtre</p>
    <p><strong>SDL_WINDOW_ALLOW_HIGHDPI</strong>                  fenêtre en mode High-DPI (SDL2.0.1 ou plus)</p>
    <p> </p>
    <p><strong><span style="color:#ff0000;">SDL_CreateRenderer(screen, -1, SDL_RENDERER_ACCELERATED);</span></strong></p>
    <p>Créer un renderer (le renderer est la vue, la surface que l'on va afficher à l'écran).</p>
    <blockquote class="ipsQuote" data-ipsquote=""><div>
    <p><span><span>SDL_Renderer</span><span></span> <span>SDL_CreateRenderer</span><span>(</span><span>SDL_Window</span><span></span> <span>window</span><span>,</span></span><span><span> int</span> <span>index</span><span>,</span></span><span><span> Uint32</span> <span>flags</span><span>)</span></span></p>
    </div></blockquote>
    <p><strong><u>retour :</u></strong></p>
    <p>retourne un pointeur vers la structure <span><span>"SDL_Renderer</span></span>" nouvellement créée.</p>
    <p> </p>
    <p><strong><u>paramètres:</u></strong></p>
    <ol><li>le pointeur vers la structure SDL_Window créée précédemment.</li>
    <li>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.</li>
    <li>ce sont encore des flags, vous pouvez en mettre plusieurs.</li>
    </ol><p><strong>SDL_RENDERER_SOFTWARE     </strong>      rendu calculé par le CPU</p>
    <p><strong>SDL_RENDERER_ACCELERATED  </strong>    rendu calculé par le GPU <strong>(grosse nouveauté de la SDL2.0)</strong></p>
    <p><strong>SDL_RENDERER_PRESENTVSYNC</strong>    rendu synchronisé avec le taux de rafraichissement de votre écran</p>
    <p><strong>SDL_RENDERER_TARGETTEXTURE</strong>  rendu pour texture</p>
    <p> </p>
    <p><span style="color:#ff0000;"><strong>SDL_RenderPresent(renderer);</strong></span></p>
    <p>fonction affichant le rendu sur l'écran</p>
    <blockquote class="ipsQuote" data-ipsquote=""><div>
    <p><span><span>void</span> <span>SDL_RenderPresent</span><span>(</span><span>SDL_Renderer</span><span>*</span> <span>renderer</span><span>)</span></span></p>
    </div></blockquote>
    <p> </p>
    <p><strong><u>paramètre :</u></strong></p>
    <ol><li>le pointeur vers la structure SDL_Renderer créée précédemment.</li>
    </ol><p><strong><span style="color:#ff0000;">SDL_Delay(2000);</span></strong></p>
    <p>fonction qui met le programme en pause pendant x milisecondes</p>
    <blockquote class="ipsQuote" data-ipsquote=""><div>
    <p><span><span>void</span> <span>SDL_Delay</span><span>(</span><span>Uint32</span> <span>ms</span><span>)</span></span></p>
    </div></blockquote>
    <p> </p>
    <p><u><strong>paramètre:</strong></u></p>
    <ol><li>le nombre de milisecondes</li>
    </ol><p><span style="color:#ff0000;"><strong>SDL_Quit();</strong></span></p>
    <p>fonction qui ferme la sdl</p>
    <blockquote class="ipsQuote" data-ipsquote=""><div>
    <p><span><span>void</span> <span>SDL_Quit</span><span>(</span><span>void</span><span>)</span></span></p>
    </div></blockquote>
    <p> </p>
    <p><strong><span style="color:#0000cd;"><span style="font-size:24px;"><u>explication :</u></span></span></strong></p>
    <p>si vous lancez ce code, vous devriez avoir une fenêtre noire pendant 2 secondes.</p>
    <p> </p>
    <p>c'est tout à fait normal.</p>
    <p><strong>à bientôt 😉 <strong> </strong></strong></p>

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

    1 Reply Last reply
    8
    • AzadA
      AzadA
      Azad
      wrote on last edited by
      #2

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

      Administrateur du forum.
      Contactez-moi par message privé ou par mail.

      1 Reply Last reply
      0
      • AzadA
        AzadA
        Azad
        wrote on last edited by
        #3

        <p><strong>Message automatique</strong></p><p></p><p>Le sujet a été déplacé de « <a data-ipb="nomediaparse" href="<base_url>/index.php/forum/51-informatique/">Informatique</a> → <a data-ipb="nomediaparse" href="<base_url>/index.php/forum/105-autres-divers-d%C3%A9couvertes/">Autres / Divers / Découvertes</a> » to « <a data-ipb="nomediaparse" href="<base_url>/index.php/forum/38-programmation/">Programmation</a> → <a data-ipb="nomediaparse" href="<base_url>/index.php/forum/43-c/">C</a> ».</p>

        Administrateur du forum.
        Contactez-moi par message privé ou par mail.

        1 Reply Last reply
        0
        • D
          D
          Droby
          wrote on last edited by
          #4

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

          Bonne affaire ici

          1 Reply Last reply
          0
          • AzadA
            AzadA
            Azad
            wrote on last edited by
            #5

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

            Administrateur du forum.
            Contactez-moi par message privé ou par mail.

            1 Reply Last reply
            0
            • vfrzV
              vfrzV
              vfrz
              wrote on last edited by
              #6

              <p>Merci pour le tutoriel 🙂 </p>

              1 Reply Last reply
              0
              • C
                C
                cegdd
                wrote on last edited by
                #7

                <p>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 ?</p>
                <ul><li>un rayman en sprite animé qui bouge de gauche a droite de l'écran indéfiniment (<a href="https://www.youtube.com/watch?v=fTFRiKdBPec" rel="external nofollow">https://www.youtube.com/watch?v=fTFRiKdBPec</a>)</li>
                <li>un chronomètre a aiguille</li>
                </ul><p>si vous avez d'autre idée ...</p>

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

                1 Reply Last reply
                0
                • D
                  D
                  Droby
                  wrote on last edited by
                  #8

                  <p>Le rayman me semble plus marrant 🙂 </p>

                  Bonne affaire ici

                  1 Reply Last reply
                  0
                  • TiphedorT
                    TiphedorT
                    Tiphedor
                    Membre d'honneur
                    wrote on last edited by
                    #9

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

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

                    1 Reply Last reply
                    0
                    • C
                      C
                      cegdd
                      wrote on last edited by
                      #10

                      <p>j'ai beaucoup pensé à apprendre OpenGl, mais j'ai pas trouvé assez d'arguments valable ^^<br/><br/>
                      tu peux me dire ce que tu en pense ?</p>

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

                      1 Reply Last reply
                      0
                      • AlexMogA
                        AlexMogA
                        AlexMog
                        Modérateur spécialisé
                        wrote on last edited by
                        #11

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

                        Multiplayer GameDev @ Unexpected
                        

                        Mon CV

                        1 Reply Last reply
                        0
                        • TiphedorT
                          TiphedorT
                          Tiphedor
                          Membre d'honneur
                          wrote on last edited by
                          #12

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

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

                          1 Reply Last reply
                          0
                          • AlexMogA
                            AlexMogA
                            AlexMog
                            Modérateur spécialisé
                            wrote on last edited by
                            #13

                            <blockquote class="ipsQuote" data-cite="Tiphedor" data-ipsquote="" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentcommentid="8175" data-ipsquote-contentid="595" data-ipsquote-contenttype="forums" data-ipsquote-timestamp="1401534154" data-ipsquote-username="Tiphedor"><div>
                            <div>
                            <p>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. </p>
                            </div>
                            </div></blockquote>
                            <p>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 😉 ).</p>
                            <p>OpenGL est un simple outil de calcul, ce n'est pas lui qui fait le fenetrage 😉 </p>

                            Multiplayer GameDev @ Unexpected
                            

                            Mon CV

                            1 Reply Last reply
                            0
                            • C
                              C
                              cegdd
                              wrote on last edited by
                              #14

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

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

                              1 Reply Last reply
                              0
                              • AlemortA
                                AlemortA
                                Alemort
                                wrote on last edited by
                                #15

                                <p>Très bon tutoriel pour passer de la SDL 1.2 à la SDL 2.0 🙂 </p>
                                <p> </p>
                                <p>Je vais lire le second.</p>

                                1 Reply Last reply
                                0
                                • AlexMogA
                                  AlexMogA
                                  AlexMog
                                  Modérateur spécialisé
                                  wrote on last edited by
                                  #16

                                  <blockquote class="ipsQuote" data-cite="cegdd" data-ipsquote="" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentcommentid="8180" data-ipsquote-contentid="595" data-ipsquote-contenttype="forums" data-ipsquote-timestamp="1401560704" data-ipsquote-username="cegdd"><div>
                                  <div>
                                  <p>et qu'est-ce qu'il m'apportera ? a part un accès plus bas niveau.</p>
                                  </div>
                                  </div></blockquote>
                                  <p>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.</p>

                                  Multiplayer GameDev @ Unexpected
                                  

                                  Mon CV

                                  1 Reply Last reply
                                  0

                                  Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                  Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                  With your input, this post could be even better 💗

                                  Register Login
                                  Reply
                                  • Reply as topic
                                  Log in to reply
                                  • Oldest to Newest
                                  • Newest to Oldest
                                  • Most Votes


                                  • Login

                                  • Login or register to search.
                                  Powered by NodeBB Contributors
                                  • First post
                                    Last post
                                  0
                                  • Categories
                                  • Recent
                                  • Tags
                                  • Popular
                                  • World
                                  • Users
                                  • Groups