Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Résolu] Problème du carré blanc.  (Lu 2044 fois)

0 Membres et 1 Invité sur ce sujet

cChaD

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
[Résolu] Problème du carré blanc.
« le: Septembre 05, 2013, 11:19:33 am »
Bonjour, j'ai un petit soucis avec les sf::Texture, en effet dans mon programme je veut chargé toutes mes textures depuis un fichier texte puis les stockés dans un vector seulement, quand je les affiches j'ai le "fameux carré blanc"

ou plutôt, j'ai qu'une texture sur 2 qui s'affiche.


void ListView::LoadIcons(std::string path)
{
    std::ifstream file(path.c_str());
    std::string text, line, imagePath;
    int loop = 0, tab = 0;

    if(file.is_open())
    {
        while(getline(file, line))
        {
            ...

            sf::Texture texture;
            texture.loadFromFile(imagePath);
            texture.setSmooth(false);

            mTextures.push_back(texture);

            gui::Label *label = new gui::Label(text);
            label->LoadImage(mTextures.back()); // Prend une réference
            label->SetMargins(5);


    file.close();
}


Cordialement,
cChaD
« Modifié: Septembre 05, 2013, 11:57:05 am par cChaD »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème du carré blanc.
« Réponse #1 le: Septembre 05, 2013, 11:36:44 am »
Lorsque tu ajoutes un élément au vector, si celui-ci a besoin de plus de place en mémoire, il va bouger ailleurs, invalidant toutes les références de sf::Texture que tu as déjà affectées.

Plusieurs solutions :
- pré-allouer tous les éléments du vecteur de sorte qu'il n'ait pas à grandir dynamiquement
- utiliser un conteneur qui peut grandir sans bouger ses éléments en mémoire (std::list)
- charger toutes les textures dans un premier temps, puis ensuite les affecter aux labels
Laurent Gomila - SFML developer

cChaD

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
Re : Problème du carré blanc.
« Réponse #2 le: Septembre 05, 2013, 11:44:19 am »
Merci mais dans ce cas pourquoi ici, cela fonctionne t'il ?

void GraphicEngine::LoadGUI()
{
    // On ouvre le fichier avec tous les chemins des images de la GUI
    ifstream file("Images/GUI/liste.txt");

    string line; // Sert à stocker le chemin de chaque images

    while(getline(file, line))
    {
        if(line != "")
        {
            sf::Texture texture;

            if(!texture.loadFromFile(line))
            {
                cout << "Erreur: Impossible d'ouvrir le fichier " << line << endl;
            }
            texture.setSmooth(false);

            _GUItexture.push_back(texture);
        }

        else
            cout << "Erreur : Impossible d'ouvrir le fichier GUI" << endl;
    }


    file.close();
}

EDIT:  je pense avoir compris, je n'utilise les sf::Texture qu'apres que le vector sois remplis donc toutes les adresses ne bouge plus, c'est bien ça ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème du carré blanc.
« Réponse #3 le: Septembre 05, 2013, 11:54:24 am »
Oui.
Laurent Gomila - SFML developer