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

C++ Discussion :

petite question memoire (en SDL)


Sujet :

C++

  1. #1
    Nouveau membre du Club Avatar de fred_sell
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Points : 33
    Points
    33
    Par défaut petite question memoire (en SDL)
    bonsoir

    voilà j'ai besoin de votre conseil :
    voilà mon petit code :

    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
    SDL_Surface*ecran;
    SDL_Rect positon;
     
    SDL_Init(SDL_INIT_VIDEO);
    ecran=SDL_SetVideoMode(100 , 100 , 32 , SDL_HWSURFACE);
     
    position.x=0;position.y=0;
    SDL_BlitSurface(SDL_LoadBMP("n'importe laquelle") , NULL , ecran , &position);
    SDL_Flip(ecran);
     
    //............patati patata.................
     
    //la fin 
     
    SDL_Quit();
    on a là deux surfaces ecran (globale) et l'autre qu'on collée,
    je ne sais pas comment libérer de l'espace alloué à ecran et à l'autre.
    je pense que SDL_Quit(); libére ecran, n'est ce pas ??

    qu'en dites vous ??

    merci d'avance!

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


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

    Pour désallouer la mémoire allouer par la SDL, il faut utiliser la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SDL_FreeSurface(SDL_Surface*)
    Pour votre code, avant le SDL_Quit il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SDL_FreeSurface(ecran);
    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
    Nouveau membre du Club Avatar de fred_sell
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Points : 33
    Points
    33
    Par défaut
    oui mais la surface qu'on a collé sur ecran !!
    on en fait quoi ??

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    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 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Ah oui, excusez moi j'avais pas vu ce petit détail dans le code
    Donc de ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SDL_BlitSurface(SDL_LoadBMP("n'importe laquelle") , NULL , ecran , &position);
    tu passe à ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SDL_Surface* image = SDL_LoadBMP("votre_image.bmp");
    if ( image == NULL )
    <div style="margin-left:40px">//erreur
    SDL_FreeSrface(ecran); // On supprime ce qui avait été crée
    return; // Si possible en notifiant l'erreur</div>
    SDL_BlitSurface(image , NULL , ecran , &position);
     
    // Avant le SDL_Quit
    SDL_FreeSurface(image);
    SDL_FreeSurface(ecran);
    Je voudrais juste remarquer que le code de base était très "instable" car si SDL_LoadBMP n'arrive pas à charger elle retourne nulle, et peut donc faire planté SDL_BlitSurface... ( enfin ça dépend comment c'est géré par la SDL après , j'ai pas vérifié la doc ).
    ( Mais comme vous l'avez dit, on perdait bien la 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.

  5. #5
    Nouveau membre du Club Avatar de fred_sell
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Points : 33
    Points
    33
    Par défaut
    ce que j'ai compris c'est qu'on doit affecter l'image BMP chargée dans un pointeur qu'on connait puis quand on veut libérer la mémoire on fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SDL_FreeSurface(notre pointeur); //puis...
    SDL_FreeSurface(la surface globale);
    n'est ce pas ??

    d'habitude dans SDL_BlitSurface, j'envoie directement l'image chargée par
    SDL_LoadBMP dans le 1er paramètre sans la stocker d'abord dans
    un pointeur.
    comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_BlitSurface(SDL_LoadBMP("n'importe laquelle") , NULL , ecran , &position);
    est ce que tout ce que j'ai dit est vrai ?

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    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 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Tout est bon dans ce que vous avez dit,

    Bien sur que ça marche de passer directement le resultat de SDL_LoadBMP dans SDL_Blit, sauf que le jour ou SDL_LoadBMP plante ( ne trouve pas l'image par exemple ) il se peut que SDL_Blit plante ( car recevant un pointeur NULL) ... et que le programme plante ( erreur de segmentation )
    Après je dis ça, j'ai toujours pas regardé la doc.

    Pour il faut mieux stocker le resultat de SDL_LoadBMP, c'est très simple:

    Premièrement , pour supprimer la surface par la suite ( désallocation de mémoire )
    Deuxièmement, car les accès Disque dur sont lent, et que SDL_LoadBMP fait un accès disque dur, donc c'est à éviter. De plus rajouter une variable, tant qu'elle n'est pas desallouer, permet de reutiliser ta surface déjà chargé ( donc pas besoin de la chargé plein de fois ).

    Sinon, sur le site, il y a un excellent tuto sur la SDL ( celui de Loka ).
    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.

  7. #7
    Nouveau membre du Club Avatar de fred_sell
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Points : 33
    Points
    33
    Par défaut
    d'accord merci beaucoup !!

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

Discussions similaires

  1. Petite question relative à freopen + SDL
    Par _Fenrir_ dans le forum SDL
    Réponses: 1
    Dernier message: 22/09/2012, 11h41
  2. Petites questions d'un débutant en SDL
    Par sugarcoma dans le forum SDL
    Réponses: 6
    Dernier message: 13/01/2009, 12h07
  3. Petite question de memoire
    Par CaptnB dans le forum C++
    Réponses: 12
    Dernier message: 06/07/2005, 14h59
  4. [Visuel XP] Petite question sur le theme XP...
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 12
    Dernier message: 20/01/2005, 14h41
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49

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