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

On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

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 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


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