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

Auteur Sujet: Erreur avec sf::Font et OpenGL  (Lu 3925 fois)

0 Membres et 1 Invité sur ce sujet

  • Invité
Erreur avec sf::Font et OpenGL
« le: Octobre 10, 2014, 06:06:06 pm »
Bonjour,
Au moment où je quitte mon programme, j'ai une fenêtre qui s'affiche que mon programme a cessé de fonctionner, comme s'il avait planté. Dans les faits ce n'est pas dérangeant puisque je voulais justement quitter le programme, mais ce n'est pas très propre.
Quand j'essaie de debugger, lorsque je quitte le programme, l'erreur suivante s'affiche 6 fois dans la console :
An internal OpenGL call failed in Texture.cpp (95) : GL_INVALID_OPERATION, the specified operation is not allowed in the current state
Mon code :
(click to show/hide)

(click to show/hide)
(click to show/hide)

(click to show/hide)
(click to show/hide)

(click to show/hide)
(click to show/hide)

(click to show/hide)
(click to show/hide)

(click to show/hide)
(click to show/hide)

Merci d'avance pour votre aide.
« Modifié: Octobre 12, 2014, 08:25:23 pm par Glân de Brylan »

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Re : Erreur avec sf::Texture et OpenGL
« Réponse #1 le: Octobre 11, 2014, 02:25:27 pm »
Tu nous donnes un peu trop de code là ...

Enlève-nous les fonctions qui ne sont pas utilisées dans le cas de ton bug

Glân de Brylan

  • Invité
Re : Erreur avec sf::Texture et OpenGL
« Réponse #2 le: Octobre 11, 2014, 05:07:14 pm »
C'est bon, j'ai retiré le maximum possible.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Erreur avec sf::Texture et OpenGL
« Réponse #3 le: Octobre 11, 2014, 06:42:57 pm »
Lorsque tu debug et que ça plante, ça plante où ? Quelle est la pile d'appels ?
Laurent Gomila - SFML developer

  • Invité
Re : Erreur avec sf::Texture et OpenGL
« Réponse #4 le: Octobre 11, 2014, 06:56:18 pm »
Ça plante au moment où je quitte le programme (étrange...).
(click to show/hide)
Dans la pile d'appels, pendant l'exécution, j'ai cette ligne qui est surlignée en rouge :
#11 68EC25DC   sf::Font::cleanup(this=0x28f854) (D:\developpement\sfml\sfml\src\SFML\Graphics\Font.cpp:350)
Heu, la ligne 350 de Font.cpp, c'est le commentaire qui sépare getKerning() et getLineSpacing(). Je pige pas tout.
Autre truc bizarre, il veut absolument accéder au disque D, mais D:, c'est le lecteur CD. Le problème vient probablement de là ? J'ai pourtant bien linké mes bibliothèques...c'est un bug de la SFML ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Erreur avec sf::Texture et OpenGL
« Réponse #5 le: Octobre 12, 2014, 11:21:26 am »
Difficile à debugger, il reste plein de code superficiel. Essaye de reproduire le bug avec un code vraiment minimal. On se fiche que ça fasse toujours la même chose, avec des fenêtres et des listes de boutons, le problème semble venir de ta gestion des polices ;)
Laurent Gomila - SFML developer

Glân de Brylan

  • Invité
Re : Erreur avec sf::Texture et OpenGL
« Réponse #6 le: Octobre 12, 2014, 01:19:02 pm »
Alors j'ai essayé avec ce code là :
#include <SFML/Graphics/RenderWindow.hpp>
#include <SFML/Window/Event.hpp>
#include <SFML/Graphics/Text.hpp>

using namespace sf;

int main()
{
    Font font;
    font.loadFromFile("LETTERS_.ttf");
    Text txt("test", font);

    RenderWindow window(VideoMode(800,600), "Feunaitr");
    Event event;

    while(window.isOpen())
    {
        window.clear();
        window.draw(txt);
        window.display();

        while(window.pollEvent(event))
        {
            if(event.type == Event::Closed)
                window.close();

            if(event.type == sf::Event::KeyPressed)
            {
                switch(event.key.code)
                {
                case sf::Keyboard::Left:
                    txt.move(-3,0);
                    break;
                case sf::Keyboard::Right:
                    txt.move(3,0);
                    break;
                case sf::Keyboard::Up:
                    txt.move(0,-3);
                    break;
                case sf::Keyboard::Down:
                    txt.move(0,3);
                    break;
                default:
                    break;
                }
            }
        }
    }

    return 0;
}
 
Mais là ça se fait sans problème. Pourtant ma seule utilisation des polices dans le code d'avant c'est :
    sf::Font font; font.loadFromFile("resources/LETTERS_.ttf");
    CheckButton btn("resources/normal.png", "resources/coche.png", *new sf::Text("test", font));
Je ne comprends pas. J'ai essayé d'enlever le *new et de réellement créer un sf::Text puis de le passer en paramètres mais ça ne change rien.

Ce que je trouve vraiment bizarre c'est que d'après la pile d'appels (même avec le code simplifié qui foncitonne), il semble vouloir accéder à l'emplacement
D:\developpement\sfml\sfml\src\SFML\Graphics\Font.cpp
Qui n'existe pas. Comme je l'ai dit précédemment, D:, c'est mon lecteur CD.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Erreur avec sf::Texture et OpenGL
« Réponse #7 le: Octobre 12, 2014, 02:17:43 pm »
Ne te préoccupe pas du chemin des fichiers sources dans les symboles de debugging, c'est le chemin qui a été pris lorsque les binaires ont été compilés, donc sur ma propre machine.

Bon, maintenant tu as un code qui fonctionne, et un code qui ne fonctionne pas. Tu as fait le plus dur, il suffit désormais d'ajouter petit à petit au code qui fonctionne, jusqu'à ce que ça ne fonctionne à nouveau plus. Il n'y a pas de magie, c'est comme ça que tout le monde fait. Faut pas hésiter à bidouiller le code dans tous les sens pour trouver l'origine de tels bugs.
Laurent Gomila - SFML developer

Glân de Brylan

  • Invité
Re : Erreur avec sf::Texture et OpenGL
« Réponse #8 le: Octobre 12, 2014, 04:05:37 pm »
Trouvé ! J'ai suivi ta méthode maintenant je sais que le problème vient de glan::ButtonsList.
Je vais continuer à chercher, mais ça devrait être plus facile maintenant que je sais où chercher.

Cependant, j'ai remarqué une autre chose qui m'intrigue : quand je quitte le programme durant le debugging, le message suivant s'affiche dans la fenêtre du debugger de l'IDE (pas dans la console) :
At C:\Users\Jules\Desktop\Documents\C++\Projets SFML\SFML GUI\ButtonsList.cpp:16
Program received signal SIGTRAP, Trace/breakpoint trap.
In ?? () ()
Je n'ai mis aucun breakpoint ligne 16, c'est l'accolade de fin de fonction du destructeur, je suis assez perplexe. Ensuite il y a :
350     D:\developpement\sfml\sfml\src\SFML\Graphics\Font.cpp: No such file or directory.
#11 0x68ec25dc in sf::Font::cleanup (this=0x28f854) at D:\developpement\sfml\sfml\src\SFML\Graphics\Font.cpp:350
Cannot find bounds of current function
Là s'affichent dans la console les "An internal OpenGL...". Et quand je fais "next line", "Cannot find bounds of current function" se répète apparemment à l'infini. Évidemment, il n'y a pas de fonction à la ligne 350 de Font.cpp.

Bon.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Erreur avec sf::Texture et OpenGL
« Réponse #9 le: Octobre 12, 2014, 04:17:16 pm »
Te prends pas trop la tête pour ça. Concentre toi sur ton problème.
Laurent Gomila - SFML developer