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 :

[SDL] Peut-on remplacer SDL_MapRGB par sa propre macro ?


Sujet :

SDL

  1. #1
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 334
    Points : 130 265
    Points
    130 265
    Billets dans le blog
    1
    Par défaut [SDL] Peut-on remplacer SDL_MapRGB par sa propre macro ?
    Bonjour !

    Voilà, j'ai une question qui me tourmente depuis quelques temps. Quand on utilise la SDL dans un contexte d'un mode couleurs 32 bits, on sait qu'on fait des suppositions sur l'organisation de la mémoire vidéo (par exemple si on veut poser un pixel : on sait que les pixels sont organisés linéairement, ligne par ligne).

    Mais en ce qui concerne le codage couleur ? Il y a certes la fonction SDL_MapRGB() qui se charge de convertir une couleur (R, V, B) en code couleur, mais est-ce qu'il est raisonnable de supposer que le codage se fait sous la forme :
    - Bits 0-7 : bleu
    - Bits 8-15 : vert
    - Bits 16-23 : rouge ?

    Si c'est le cas, ça permettrait de faire une macro de composition et de pouvoir ainsi facilement faire de vrais constantes couleur en utilisant cette macro.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define RVB(r, v, b)	(((r) << 16) | ((v) << 8) | (b))
    Cela fonctionne sous Windows et Linux, mais est-ce que ça fonctionnera partout, notamment sous les systèmes Big Endian, à votre avis ?

    Merci d'avance pour votre réponse.
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 205
    Points : 182
    Points
    182
    Par défaut


    Mais en ce qui concerne le codage couleur ? Il y a certes la fonction SDL_MapRGB() qui se charge de convertir une couleur (R, V, B) en code couleur, mais est-ce qu'il est raisonnable de supposer que le codage se fait sous la forme :
    - Bits 0-7 : bleu
    - Bits 8-15 : vert
    - Bits 16-23 : rouge ?
    tes couleurs sont codés en fait en hexa, avec un octet par couleur :

    par exemple une couleur
    en RGB : 255-22-0
    en hexa c'est hFF2200 (le sens doit etre inversé ou pas ?)

    si tu a en plus l'alpha, je crois que l'octet se place devant
    ca donne un truc du style : hA60022FF

    donc, tu as raison

    Si c'est le cas, ça permettrait de faire une macro de composition et de pouvoir ainsi facilement faire de vrais constantes couleur en utilisant cette macro.
    qu est ce que tu entends par "constante couleur" ?

    Cela fonctionne sous Windows et Linux, mais est-ce que ça fonctionnera partout, notamment sous les systèmes Big Endian, à votre avis ?
    je comprends maintenant ta question sur le codage de la couleur...

    à mon humble avis, le codage de la couleur est indépendante de chaque système. Si ton code marche sur les PC, ce n'est pas certain qu'il tournera sur des solaris par exemple (je ne sais plus s'il sont en "big" ou "little").
    Mais la majorité des systèmes et OS sont en "big endian", donc la majorité des ordinateurs (de la simple calculette à la navette spatiale) pourront lancer ton programme.


    ai je éclairé tes couleurs ?
    "Les gardiens de la paix, au lieu de nous la garder, ils feraient mieux de nous la foutre." (Coluche)

    Ma Brute

  3. #3
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 334
    Points : 130 265
    Points
    130 265
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par l@rry
    qu est ce que tu entends par "constante couleur" ?
    Je voudrais définir des constantes couleur, par exemple BLANC = RVB(0xFF, 0xFF, 0xFF). En fait je travaille en C (j'ai posé la question sur le forum C++ parce qu'il semble qu'il y a bien plus de questions sur la SDL ici que sur le forum C), je voudrais définir mes constantes à l'aide d'un enum, et donc j'ai besoin que ça soit calculé à la compilation, d'où le besoin de ma macro.

    à mon humble avis, le codage de la couleur est indépendante de chaque système. Si ton code marche sur les PC, ce n'est pas certain qu'il tournera sur des solaris par exemple (je ne sais plus s'il sont en "big" ou "little").
    Mais la majorité des systèmes et OS sont en "big endian", donc la majorité des ordinateurs (de la simple calculette à la navette spatiale) pourront lancer ton programme.
    Je te corrige là : les ordinateurs sous architecture "Intel" fonctionnent sur Little Endian. Donc la majorité des ordinateurs sont en Little Endian ; ce qui me pose souci ce sont essentiellement les Macs sous PowerPC qui sont en Big Endian ; je me demande si ça affecte ou pas le codage de la couleur. En fait ça l'affectera forcément puisque les octets seront inversés, mais est-ce que ma macro qui fabrique les couleurs par décalage fonctionnera encore ou pas ? A défaut d'avoir un Mac à ma disposition, je n'en ai aucune idée.
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

Discussions similaires

  1. Peut on remplacer %lf par %f ?
    Par chicabonux dans le forum Débuter
    Réponses: 5
    Dernier message: 18/03/2009, 11h22
  2. Réponses: 42
    Dernier message: 19/06/2007, 09h40
  3. Réponses: 1
    Dernier message: 11/12/2006, 19h17
  4. Réponses: 1
    Dernier message: 09/12/2005, 23h34
  5. DB2 Peut-on remplacer le FETCH FIRST par plus performant?
    Par souellet dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/09/2005, 17h07

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