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] effacer une surface


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 [SDL] effacer une surface
    Salut j'essaie de coder un starfield horizontal (comme au bon vieux temps de l'amiga et de l'atari).
    J'ai une fonction de callback d'un timer qui se charge d'afficher les points, avant de les afficher j'essaie d'effacer l’écran avec un fillRect (méthode conseillée dans un site concurrent) mais cela 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
    14
    15
    16
    17
    18
    Uint32 anim(Uint32 intervalle, void *pointeur) {
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
        int i=0, x=0, y=0;
        for(i=0; i<NB_STARS; i++) {
        x=stars1[i*2][0];
        y=stars1[i*2][1];
        x+=STEP1;
        if(x>WIDTH) {
            x=0;
            y=(int)((double)rand()/(double)RAND_MAX*(WIDTH-1));
        }
        stars1[i*2][0]=x;
        stars1[i*2][1]=y;
        *((Uint32*)(ecran->pixels)+x+(y*ecran->w))=SDL_MapRGB(ecran->format, RGB1, RGB1, RGB1);
        SDL_UpdateRect(ecran, x, y, 1, 1);
        }
        return intervalle;
    }
    j'essaie de remplir l’écran de noir mais apparemment sans effet sur les pixels déjà colorés, je pensais "copier" une surface sur une autre mais je trouve ça un peu bourrin, j'aimerais savoir si il n'y a pas d'autre solutions?
    Merci !

  2. #2
    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,

    Et si après ton SDL_FillRect tu faisais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_UpdateRect(ecran,0,0,ecran->w,ecran->h);
    autrement dit, un SDL_Flip? Cela rafraichira ton écran, ce que ne fait pas SDL_FillRect. Si tu ne le fais pas, ton écran est bel et bien noir en mémoire, mais pas à l'affichage.

    Car, à l'intérieur de tes boucles, la seule chose que tu fais c'est mettre à jour le pixel dont tu viens de changer la valeur (tu n'effaces pas une position précédente).

    En passant, tu n'as pas besoin d'initialiser i,x,et y.

    Dernière chose: il y a un forum SDL pour y poster les messages s'y rapportant

    Bien à toi,

    Edgar.
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  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 edgarjacobs Voir le message
    Hello,

    Et si après ton SDL_FillRect tu faisais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_UpdateRect(ecran,0,0,ecran->w,ecran->h);
    autrement dit, un SDL_Flip? Cela rafraichira ton écran, ce que ne fait pas SDL_FillRect. Si tu ne le fais pas, ton écran est bel et bien noir en mémoire, mais pas à l'affichage.

    Car, à l'intérieur de tes boucles, la seule chose que tu fais c'est mettre à jour le pixel dont tu viens de changer la valeur (tu n'effaces pas une position précédente).

    En passant, tu n'as pas besoin d'initialiser i,x,et y.

    Dernière chose: il y a un forum SDL pour y poster les messages s'y rapportant

    Bien à toi,

    Edgar.
    Oui merci je fais un SDL_Flip et ça marche.

  4. #4
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Tu n'avais pas mis de SDL_Flip ?
    Pas étonnant que rien s'affichait , vu que SDL_Flip permet de afficher sur écran.

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

Discussions similaires

  1. Creer une surface transparente en SDL
    Par theclem35 dans le forum SDL
    Réponses: 12
    Dernier message: 08/05/2011, 14h14
  2. [FAQ][SDL] Comment récupérer les pixels d'une surface ?
    Par Fiquet dans le forum Contribuez
    Réponses: 2
    Dernier message: 19/09/2010, 11h24
  3. [SDL] Effacer une surface (image)
    Par 0nn2belle dans le forum C++
    Réponses: 1
    Dernier message: 10/02/2010, 11h40
  4. comment je peut effacer une surface
    Par kris1 dans le forum SDL
    Réponses: 6
    Dernier message: 14/12/2007, 14h51
  5. Changement de la taille d'une surface SDL
    Par Kerwando dans le forum SDL
    Réponses: 4
    Dernier message: 06/06/2006, 21h34

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