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 :

Impossible de créer corectement une texture [SDL 2.0]


Sujet :

SDL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2012
    Messages : 46
    Points : 31
    Points
    31
    Par défaut Impossible de créer corectement une texture
    Bonjour, j'aimerais pouvoir créer manuellement (et non pas en charger) des textures avec la SDL2, alors j'ai écrit cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SDL_Texture *SDL_Texture_create(SDL_Renderer *renderer, const unsigned width, const unsigned height, const Uint8 Rmask, const Uint8 Gmask, const Uint8 Bmask)
    {
        SDL_Texture *texture = NULL;
     
        if((texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STATIC, width, height)) == 0)
            error_sdl();
     
        if((SDL_SetTextureColorMod(texture, Rmask, Gmask, Bmask)) < 0)
            error_sdl();
     
        return texture;
    }
    Je ne donne pas tout l'algorithme du programme complet car il est assez long, et parce que je pense que l'essentiel du soucis est ici. J'ai aussi un soucis avec le second paramètre de SDL_CreateTexture(), je ne sais pas vraiment qu'elle constante utiliser.

    La texture est bien créee, seulement il y a un gros soucis au niveau des couleurs :



    Elle ne sont pas du tout respectés, et affichent nimporte quoi ! Petite parenthèse j'ai ce même soucis lorsque je souhaite charger des images de 64x64.

    Bon ici plusieurs textures ont étés créees avec toutes une taille, un angle de rotation, une position et des couleurs différentes.

    J'aimerais donc savoir ici : Pourquoi les couleurs ne sont pas du tout respectées ? En espérant qu'il y ait aussi une solution à ce problème. Merci.

    Sinon juste pour préciser au niveau de l'OS je suis sous la dernière version d'Ubuntu.

  2. #2
    Inactif  
    Homme Profil pro
    c++ java php javascript
    Inscrit en
    Octobre 2013
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : c++ java php javascript
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 374
    Points : 179
    Points
    179
    Par défaut
    chez moi je fais ça et ça marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texture = SDL_CreateTexture(renderer,SDL_PIXELFORMAT_ARGB8888,SDL_TEXTUREACCESS_STATIC,W,H);
    nous devons inventer la langue de feu pour crâmer la langue de bois

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Essayez de désactiver le masque, pour commencer.
    Ensuite, quel est le format que vous utilisez pour créer vos textures ?
    Êtes vous sur que c'est du RGBA ? (sur 32 bits) ?
    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.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2012
    Messages : 46
    Points : 31
    Points
    31
    Par défaut
    Désactiver le masque ? C'est à dire supprimer cette ligne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        if((SDL_SetTextureColorMod(texture, Rmask, Gmask, Bmask)) < 0)
            error_sdl();
    Lorsque je fait cela j'obtient un résultat très semblable, mais les couleurs sont alors beaucoup plus sombre :



    Je ne sais pas vraiment quel format utiliser, ici j'ai utilisé SDL_PIXELFORMAT_RGBA8888 en pensant qu'il était le mieux adapté. J'ai aussi essayé SDL_PIXELFORMAT_ARGB8888, mais cela afiche toujours nimporte quoi.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Le format a utilisé est celui que vous utilisez pour créer vos textures en mémoire. C'est le format des pixels de la surface.
    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.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2012
    Messages : 46
    Points : 31
    Points
    31
    Par défaut
    Je suis désolé si je ne comprend pas très bien, le seul endroit ou j'ai indiqué le format à utiliser est lors de la création de la texture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if((texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STATIC, width, height)) == 0)
            error_sdl();
    Que dois-je faire plus précisément ?

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    La texture, il y a bien un moment où vous lui indiquez ce qu'elle contient, non ?
    Comment le faites vous ?
    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
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2012
    Messages : 46
    Points : 31
    Points
    31
    Par défaut
    Eh bien je récupère les valeurs depuis un fichier texte qui contient la largeur, la hauteur, et les couleurs RGB à utiliser. Et ensuite je les envoient toutes à la fonction pour créer la texture.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Oui, on y arrive. Vous parlez de couleur RGB, n'est ce pas ?
    Il n'y a pas de A, pas de canal alpha, dans votre fichier texte. On est ok ?

    Donc, dans ce cas là, vous devez utiliser : SDL_PIXELFORMAT_RGB888
    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.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2012
    Messages : 46
    Points : 31
    Points
    31
    Par défaut
    Oui il n'y pas de canal alpha, mais lorsque j'utilise SDL_PIXELFORMAT_RGB888 j'ai toujours le même soucis, il n'y a aucune véritable différence.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Il fauvrait vraiment savoir le format des pixels que vous envoyez pour remplir la texture.
    Sinon, en réactivant les masques ? Cela donne mieux, maintenant ?
    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.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2012
    Messages : 46
    Points : 31
    Points
    31
    Par défaut
    Non, il n'y a pas de changements en réactivant les masques. Comment faire pour savoir le format des pixel à envoyer ?

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Le format des pixels à envoyer, c'est vous qui le choisissez avec votre code, lorsque vous lisez le fichier et que vous mettez les pixels en mémoire.
    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.

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2012
    Messages : 46
    Points : 31
    Points
    31
    Par défaut
    Oui, c'est la valeur que j'envoie en second paramètre à SDL_CreateTexture(), je viens d'essayer toutes les valeurs disponibles ici -> http://wiki.libsdl.org/SDL_PixelForm...egoryPixels%29 et j'ai n'ai jamais eu de résultat correct.

    Vous souhaitez peut-être voir mon code au complet ?

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Alors, votre lecture de fichier est peut être fausse.
    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.

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2012
    Messages : 46
    Points : 31
    Points
    31
    Par défaut
    Ah bon, pourtant je viens de faire un autre test et j'ai toujours le même soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    int main(int argc, char *argv[])
    {
        ScreenContext *screen;
        SDL_Texture *texture = NULL;
        SDL_Rect rect = {0, 0, 240, 160};
        SDL_Event event;
     
        if(SDL_Init(SDL_INIT_VIDEO) == -1)
            errSDL();
     
        screen = createScreenContext("Texture creation", SCREEN_WIDTH, SCREEN_HEIGHT, 0);
        SDL_SetRenderDrawColor(screen->renderer, 0xFF, 0xFF, 0xFF, 0x0);
     
        if((texture = SDL_CreateTexture(screen->renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STATIC, rect.w, rect.h)) == 0)
            errSDL();
     
        rect.x = (SCREEN_WIDTH / 2) - (rect.w / 2);
        rect.y = (SCREEN_HEIGHT / 2) - (rect.h / 2);
     
        do
        {
            SDL_PollEvent(&event);
     
            SDL_RenderClear(screen->renderer);
            SDL_RenderCopy(screen->renderer, texture, NULL, &rect);
            SDL_RenderPresent(screen->renderer);
     
            SDL_Delay(5);
     
        }while(event.type != SDL_KEYDOWN);
     
        SDL_DestroyTexture(texture);
        SDL_Quit();
     
    	return 0;
    }


    Le code est très simple et théoriquement devrait fonctionner, mais pourtant affiche encore une fois nimporte quoi.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Ça fonctionne, non ?
    Vous ne remplissez pas la texture (la mémoire vidéo coté GPU n'est pas initialisée).
    Actuellement, vous ne faites que créer une texture, que vous laissez vide.

    Le concept est expliqué ici : http://alexandre-laurent.developpez....es-sdl-2/#LIII
    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.

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2012
    Messages : 46
    Points : 31
    Points
    31
    Par défaut
    Même lorsque je remplie la texture j'ai toujours ce même soucis, par exemple en ajoutant ces deux lignes juste après sa création :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        if((SDL_SetTextureColorMod(texture, 0xFF, 0x0, 0x0)) < 0)
            errSDL();
    Ca marche évidement si la couleur est totalement noire, mais sinon dans ce cas j'obtient ça :


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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Désolé, mais ce n'est pas le SDL_SetColorMod() qui remplit la texture.
    C'est : SDL_UpdateTexture() : http://wiki.libsdl.org/SDL_UpdateTexture
    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.

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2012
    Messages : 46
    Points : 31
    Points
    31
    Par défaut
    Ah d'accord (je me sens très idiot d'un coup), sinon je ne comprend pas très bien le troisième paramètre. Comment fonctionne t-il ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [lomboz 3.2]impossible de créer une nouvelle action
    Par olivier57b dans le forum Struts 1
    Réponses: 1
    Dernier message: 03/03/2007, 11h34
  2. Créer une texture transparente
    Par nicoenz dans le forum OpenGL
    Réponses: 21
    Dernier message: 09/01/2007, 14h24
  3. Réponses: 5
    Dernier message: 09/11/2006, 10h36
  4. Réponses: 1
    Dernier message: 30/12/2005, 17h14
  5. Réponses: 17
    Dernier message: 03/12/2004, 14h33

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