Partage
  • Partager sur Facebook
  • Partager sur Twitter

SDL et couleur de fenêtre

Sous Mac OS avec Xcode (au cas où)

Sujet résolu
    9 février 2016 à 18:49:50

    Bonsoir,

    Je suis le cours sur le langage C et j'ai des soucis avec la partie SDL.

    Voici le code qui pose problème :

    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    
    #undef main
    
    int pause();
    
    int main(int argc, char *argv[])
    {
        // création du pointeur screen qui correspond à l'écran
        SDL_Surface *screen = NULL;
        
        // initialisation de SDL
        SDL_Init(SDL_INIT_VIDEO);
        
        // on défini ce qu'est le pointeur screen
        screen = SDL_SetVideoMode(640, 480, 8, SDL_HWSURFACE);
        
        // création de la couleur rouge
        Uint32 rouge = SDL_MapRGB(screen->format, 255, 0, 0);
        
        // on colorie l'écran en rouge
        SDL_FillRect(screen, NULL, rouge);
        
        // mise à jour de l'écran
        SDL_Flip(screen);
    
        // Mise en place d'un titre
        SDL_WM_SetCaption("Ma fenêtre rouge", NULL);
    
        // pause avec fonction bidouillée
        pause();
        
        // fin de SDL
        SDL_Quit();
        
        return EXIT_SUCCESS;
    }
    
    
    int pause()
    {
        int continuer = 1;
        SDL_Event event;
        
        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
            }
        }
        return 0;
    }

    Pour faire fonctionner le tout j'ai dû ajouter un #undef main (dont je n'ai pas encore bien compris l'utilité) et changer la fonction pause car avec le type void donné dans le cours ça me faisait systématiquement une erreur de type. Je ne pense pas que ces deux points puisse causer le problème qui suit mais je préfère les signaler.

    Mon problème est que la fenêtre que je génère ainsi reste désespérément grise (couleur par défaut sous mon OS). J'ai essayé en 32 bits et en 8 ; j'ai essayé sans définir explicitement la couleur dans une variable, j'ai essayé de faire varier les valeurs du RGB. Le tout sans succès.

    Une aide serait la bienvenue pour me débloquer.

    • Partager sur Facebook
    • Partager sur Twitter
      10 février 2016 à 15:11:26

      Après avoir trouvé un PC il s'avère que le code fonctionne.

      En passant en SDL2 cela fonctionne sur mon Mac. Seule explication rationnelle qui me vienne à l'esprit c'est que Mac OS + Xcode sont fâchés avec la SDL1.2.

      • Partager sur Facebook
      • Partager sur Twitter
        10 février 2016 à 15:53:23

        Hello,

        Ben2Ben a écrit:

        En passant en SDL2 cela fonctionne sur mon Mac. Seule explication rationnelle qui me vienne à l'esprit c'est que Mac OS + Xcode sont fâchés avec la SDL1.2.

        Si tu avais dit tout de suite que tu travailais avec osx, je t'aurais dit que c'était un problème connu: osx et sdl 1.x ne font pas bon ménage au niveau des couleurs.

        A+

        Edgar;



        • Partager sur Facebook
        • Partager sur Twitter

        Aucune aide ne sera donnée par mp

          10 février 2016 à 15:54:32

          C'était écrit dans le sous-titre mais j'aurai sans doute dû le mettre plus en évidence ^^

          Merci :)

          • Partager sur Facebook
          • Partager sur Twitter
            30 juin 2017 à 17:45:20

            j ai du bidouiller après avoir eu le meme probleme , il se peut que la fonction pause devrait  être dans le programme principale car il ya une instruction qui doit contenir le pointeur écran  dans SDL_Flip(ecran); je n ai pas d explication a cela donc voila un code a essayer il devrais donner une couleur bleu sur Xcode 8.

            #include <stdio.h>
            #include <stdlib.h>
            #include <string.h>
            #include <SDL/SDL.h>
            #include "SDL_image.h"

            int main(int argc, char *argv[])
            {


            SDL_Surface *ecran = NULL ;

            SDL_Event event; int continuer = 1, tempsactuel=0,tempsavant =0;

            if (SDL_Init(SDL_INIT_VIDEO) == -1)
            {
            fprintf(stderr, " erreur de chargement de le SDL: %s \n", SDL_GetError());

            exit(EXIT_FAILURE);
            }

            ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);

            if (ecran == NULL)
            {
            fprintf(stderr, "erreur de chargement : %s \n", SDL_GetError());

            exit(EXIT_FAILURE);
            }

            SDL_WM_SetCaption(" JUSTYN", NULL);

            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format,0,0,255));


            while (continuer)
            {

            SDL_PollEvent(&event);

            switch (event.type)

            {
            case SDL_QUIT:

            continuer = 0 ; //on quitte la partie
            break;

            }
            tempsactuel = SDL_GetTicks();

            if ((tempsactuel - tempsavant)> 5)

            {
            SDL_Flip(ecran);

            }
            else
            {
            SDL_Delay(5 -(tempsactuel-tempsavant));
            }


            }

            SDL_Quit();
            return EXIT_SUCCESS;

            }

            • Partager sur Facebook
            • Partager sur Twitter
              19 avril 2019 à 22:46:41

              Salut!

              Tu dois sûrement travailler avec le livre de openclassroom. J'ai bloqué sur ce point moi aussi mais finis par trouver la solution.

              Remplaces le "SDL_Flip" par "SDL_UpdateWindowSurface(screen);.

              • Partager sur Facebook
              • Partager sur Twitter

              SDL et couleur de fenêtre

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              • Editeur
              • Markdown