IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

TTF_RenderText_Blended et define


Sujet :

SDL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 49
    Points : 26
    Points
    26
    Par défaut TTF_RenderText_Blended et define
    Bonjour,
    j'ai une petite question au sujet de la fonction TTF_RenderText_Blended.

    Actuellement, pour écrire du texte en sdl, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     SDL_Color couleurRouge = {255, 0, 0, 0};
        texte1 = TTF_RenderText_Blended(police, mot, couleurRouge);
    et cela fonctionne parfaitement.

    J'aimerais définir ma couleur avec un define (afin de l'utiliser dans plusieurs fonctions).
    Or,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define vert 0, 255, 0, 0
         texte3 = TTF_RenderText_Blended(police, mot, vert);
    m'affiche les messages d'erreur " incompatible type for argument 3 of 'TTF_RenderText_Blended'" et " too many arguments to function 'TTF_RenderText_Blended'"

    Or,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define vert (0, 255, 0, 0)
         texte3 = TTF_RenderText_Blended(police, mot, vert);
    m'affiche les messages d'erreur " left-hand operand of comma expression has no effect [-Wunused-value]" et "note: in expansion of macro 'vert'"


    Je pensais que c’était possible car pour tracer les rectangles en couleur, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define coulMarron 187, 122, 87
        SDL_FillRect(ecran, &position, SDL_MapRGB(ecran->format, coulMarron));
    et cela fonctionne très bien.


    Est-ce possible de faire la même chose avec du texte?

    Merci à ceux qui pendront la peine de me répondre.
    Ludo

  2. #2
    Membre du Club
    Homme Profil pro
    Ingénieur Système
    Inscrit en
    Novembre 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Système

    Informations forums :
    Inscription : Novembre 2019
    Messages : 17
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    Les 2 fonctions n'ont pas la même déclaration donc la même utilisation du #define ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SDL_Surface *TTF_RenderText_Blended(TTF_Font *font, const char *text, SDL_Color fg)
    avec SDL_Color défini comme ci-dessous
    typedef struct{
      Uint8 r;
      Uint8 g;
      Uint8 b;
      Uint8 unused;
    } SDL_Color;
     
    int SDL_FillRect(SDL_Surface *dst, SDL_Rect *dstrect, Uint32 color);
    avec 
    Uint32 SDL_MapRGB(SDL_PixelFormat *fmt, Uint8 r, Uint8 g, Uint8 b);
    donc lorsque tu écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #define vert 0, 255, 0, 0
         texte3 = TTF_RenderText_Blended(police, mot, vert);
    Le compilateur "voit"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         texte3 = TTF_RenderText_Blended(police, mot, 0, 255, 0, 0);
    ce qui n'est pas conforme à la définition contrairement à l'utilisation avec SDL_MapRGB


    Si tu souhaite utiliser un define commun à TTF_RenderText_Blended et à SDL_MapRGB, tu peux faire qq chose du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #define vert 0, 255, 0  // l'alpha n'est pas utilisé dans SDL_MapRGB
     
    SDL_Color couleur = {vert, 0};
     
         texte3 = TTF_RenderText_Blended(police, mot, couleur );
     
         SDL_FillRect(ecran, &position, SDL_MapRGB(ecran->format, couleur ));

  3. #3
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 623
    Points : 1 554
    Points
    1 554
    Par défaut
    Hello,

    Il me semble que tu devrais pouvoir écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define SDL_COLOR_RED	(SDL_Color){255,0,0,0}
     
    SDL_Surface *texte=SDL_RenderText_Blended(font,"....",SDL_COLOR_RED);
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    Merci beaucoup à tous les deux, ça marche.

    J'avais aussi essayé la version trouvé sur un site internet : texte=TTF_RenderText_Blended(police,"coucou",SDL_Color{0,255,0,0}); et cela ne fonctionnait pas.
    En fait, il fallait rajouter les parenthèses autour de SDL_Color.
    Je vais pouvoir remplacer tous mes boutons images en boutons textes.
    Bonne soirée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. #define D3D_DEBUG_INFO
    Par moldavi dans le forum DirectX
    Réponses: 7
    Dernier message: 03/02/2005, 14h14
  2. INSO Filter : "USER-defined exception" avec ctx_do
    Par Wiztiti dans le forum Oracle
    Réponses: 2
    Dernier message: 01/06/2004, 16h14
  3. USER DEFINE FONCTION : PB éxécution requête
    Par juelo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/01/2004, 11h12
  4. Define sur plusieurs lignes
    Par Gogoye dans le forum C
    Réponses: 6
    Dernier message: 06/10/2003, 11h45
  5. define avec GCC.
    Par vagabon dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 12/06/2003, 14h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo