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 :

UpdateTexture et couleur du sprite [SDL 2.0]


Sujet :

SDL

  1. #1
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 014
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 014
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut UpdateTexture et couleur du sprite
    Bonjour, j'ai un sprite, une image png transparente que j'essaie de blitter sur une texture, laquelle est copiée sur le renderer :

    Création de la texture 800*600 avec un fond (p_fond_1 et une SDL_Surface qui vient d'une image PNG en 800*600)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        p_texture=SDL_CreateTextureFromSurface(p_renderer, p_fond_1);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //Copie de mon sprite
    SDL_UpdateTexture(p_texture, &rect, p_brush->pixels, p_brush->pitch);
    // on efface le renderer
    SDL_RenderClear( p_renderer );
    //on copie la texture modifiée qui fait la meme taille que l'écran
    SDL_RenderCopy(p_renderer, p_texture, NULL, NULL);
    SDL_RenderPresent(p_renderer);
    L'image de fond s'affiche correctement mais pas le sprite, on dirait juste une modification de la memoire sans que la couleur du sprite (qui a une palette différente du fond) apparaisse, on dirait que la palette du fond est utilisé avec les datas de mon sprite, forcément ça m'arrange pas.
    Donc j'aimerais savoir si je dois continuer dans mon idée de copier mon sprite avec un updateTexture ou alors le faire à l'ancienne avec des SDL_Surface mais bon j'ai l'impression que ça serait pas super optimisé.
    J'ai aussi essayé de faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
         //
        p_texture_fond_1=SDL_CreateTextureFromSurface(p_renderer, p_fond_1);
         //
        p_texture_brush=SDL_CreateTextureFromSurface(p_renderer, p_brush);
        //
        SDL_RenderCopy(p_renderer, p_texture_fond_1, &src, &dest);
        SDL_RenderPresent(p_renderer);
    [Boucle while]
        SDL_RenderCopy(p_renderer, p_texture_brush, NULL, &dest);
        //je change dest, le but est de faire une trainée de 100 sprite entre 2 coordonnées
    [fin boucle]
        SDL_RenderPresent(p_renderer);
    Mais là ça marche bien sauf qu'en Fulldesktopscreen mon image de fond scintille comme si une image sur 2 était noire et l'autre était le fond.

    Merci.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Dans le deuxième cas, cela scintille à cause de la présence de deux SDL_RenderPresent().

    Dans le premier cas, vous avez des différences de format pour les couleurs des pixels ?
    Je pourrais avoir une capture, s'il vous plait.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 014
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 014
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Bonjour,

    Dans le deuxième cas, cela scintille à cause de la présence de deux SDL_RenderPresent().

    Dans le premier cas, vous avez des différences de format pour les couleurs des pixels ?
    Je pourrais avoir une capture, s'il vous plait.
    Bonjour, merci pour la réponse, mes 2 images sont du PNG, le brush(sprite) a un fond transparent contrairement à l'image de fond.

    Voici un screenshot :
    Nom : Screenshot - 28042015 - 18:04:06.png
Affichages : 141
Taille : 530,1 Ko

    et voici à quoi devrait ressembler mon sprite :
    Nom : brush.png
Affichages : 138
Taille : 305 octets

    Merci !

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    L'idée du format est tentante. Du coup, on peut imaginer une conversion avec SDL_ConvertSurfaceFormat() ou SDL_ConvertSurface().

    Je pense à une différence XRGB32/RGBA32 (mais là, c'est une hypothèse). Vous devez donc vérifier les formats de :
    • l'écran ;
    • la texture ;
    • la surface.


    Après, si la différence est t-elle, on peut directement créer la surface avec le bon format : http://wiki.libsdl.org/SDL_CreateRGB...ionTemplate%29 (mais vous devez la charger d'un fichier). Du coup, modifier le format du fichier ? (mais cela peut changer à cause des différence des PC ?).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 014
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 014
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    Bonsoir, j'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        p_brush=SDL_ConvertSurfaceFormat(p_brush, SDL_PIXELFORMAT_ARGB8888, 0);
    et il y a un petit mieux, le sprite a les bonnes couleurs sauf que la transparence ne fonctionne pas (j'ai du blanc à la place).
    Mais bon c'est positif, je m'approche du but.

  6. #6
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 014
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 014
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    Bon finalement j'ai réussi en faisant des BlitSurface, en en ayant converti toutes les surfaces avec le même format.
    Pour mon effet l'optimisation n'est pas importante mais je pensais si je devais prendre en compte cet aspect du développement, les UpdateTexture ne sont telles pas plus rapides que de travailler sur des surfaces ?
    Merci.

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Les Textures ne sont rapides que pour l'affichage. Le fait de faire transiter les données entre le CPU et le GPU est plutôt lent. C'est pour ça que la documentation est précautionnement à bien indiqué ce qu'il faut faire, si le transfert est récurrent.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  8. #8
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 014
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 014
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Les Textures ne sont rapides que pour l'affichage. Le fait de faire transiter les données entre le CPU et le GPU est plutôt lent. C'est pour ça que la documentation est précautionnement à bien indiqué ce qu'il faut faire, si le transfert est récurrent.
    ok, merci !

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

Discussions similaires

  1. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 03/05/2015, 23h29
  2. Modifier une couleur dans un sprite
    Par matteli dans le forum DirectX
    Réponses: 2
    Dernier message: 30/12/2006, 13h42
  3. Couleur d'une JComboBox disabled
    Par ced dans le forum Composants
    Réponses: 6
    Dernier message: 06/01/2004, 15h33
  4. Mixage de Couleurs
    Par exxos dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 29/05/2002, 13h34
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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