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

Auteur Sujet: RenderWindow::Create() => crash du programme  (Lu 2083 fois)

0 Membres et 3 Invités sur ce sujet

herotom99

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
RenderWindow::Create() => crash du programme
« le: Juillet 02, 2016, 08:44:23 pm »
Bonsoir,
J'essaie actuellement de créer une RenderWindow dans une classe mais lorsque j'appelle la fonction .create le programme crash (le programme a cessé de fonctionner ...). J'ai vérifié, l'erreur ne vient pas de l'ordre des libs (Graphics avant WWindow). En effet, j'arrive à créer une fenêtre avec le constructeur de classe de base.
Je précise que j'arrive très bien à faire fonctionner le code teste de sfml donc je ne pense pas que le problème vienne d'une erreur d'installation.

Renderer.h
//RENDERER//
        class AXION_API Renderer : public Object
        {
        //Constructor
        public:
                Renderer(GameContext* context);

        //System Functions
        public:
                void Init();                //FONCTION D'INITIALISATION (appellée avant le Run())
                void Run();               //FONCTION POUR LANCER LE RENDU
                void Finish();

                void Update(float DeltaTime);
        private:
                bool bIsRendererActive = false;

        //Settings
        private:
                sf::ContextSettings m_settings;

        //Window
        private:
                sf::RenderWindow m_window;
                WindowSettings m_winsettings = WindowSettings();
        public:
                sf::RenderWindow* GetWindow();
                void SetWindowSettings(WindowSettings winsettings);


        };

Renderer.cpp:
void Renderer::Init()
{
        std::cout << "->Renderer::Init::Start" << std::endl;

        //Init Context
        sf::Context();

        //Init glew
        glewExperimental = GL_TRUE;
        glewInit();

        //OpenGl settings
        glEnable(GL_DEPTH_TEST);
        glDepthFunc(GL_LESS);

        std::cout << "->Renderer::Init::End" << std::endl;
}
void Renderer::Run()
{
        std::cout << "->Renderer::Run::Start" << std::endl;

        m_window.create(sf::VideoMode(500, 500), "test");
        std::cout << "RenderWindow created" << std::endl;


        while (true)
        {
             //Boucle vide pour voir laisser apparaître la fenêtre (simple teste)
             //Fonctionne avec l'utilisation du constructeur de base de sf::RenderWindow
        }

        bIsRendererActive = true;

        std::cout << "->Renderer::Run::End" << std::endl;

}

Si vous avez besoin de plus d'informations, n'hésitez pas !

Merci  :D

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : RenderWindow::Create() => crash du programme
« Réponse #1 le: Juillet 02, 2016, 09:54:46 pm »
Que dit le debugger ?
Laurent Gomila - SFML developer

herotom99

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
Re : RenderWindow::Create() => crash du programme
« Réponse #2 le: Juillet 02, 2016, 10:09:44 pm »
J'utilise mon code sous forme de lib dans un autre projet donc je sais pas si le debugger du projet "test" ne donne suffisamment d'informations:

First-chance exception at 0x559B55F0 (sfml-window-d-2.dll) in AxionTest.exe: 0xC0000005: Access violation reading location 0xCCCCCCCC.
Unhandled exception at 0x559B55F0 (sfml-window-d-2.dll) in AxionTest.exe: 0xC0000005: Access violation reading location 0xCCCCCCCC.

J'ai pas plus d'informations mise à part les états de la mémoire. La sf::RenderWindow semble avec ses membres null (c'est logique si la fenêtre n'est pas initialisée):
m_impl = 0x00000000 <NULL>
m_window = 0x00000000 <NULL>

Je sais pas si ça peut aider :/

herotom99

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
Re : RenderWindow::Create() => crash du programme
« Réponse #3 le: Juillet 02, 2016, 11:57:44 pm »
Bon ok j'ai trouvé le problème et il est de moi ...  :'(

J'ai une class GameContext qui a comme membre un pointer de renderer. Durant l'initialisation du GameContext un objet Renderer est créé dans la fonction Init() sauf que la portée du Renderer est limitée à la fonction Init().
Du même coup, lors de l'appelle du lancement de la fenêtre Run(), le pointer pointe l'adresse d'un objet qui n'existe plus ...

Du coup j'ai remplacé m_renderer = &Renderer() qui est très moche par m_renderer = new Renderer().

La fenêtre ne pouvait donc pas se créer parce que la fenêtre n'existait plus !

Vraiment désolé pour le dérangement (j'aime pas quand je trouve l'erreur au dernier moment alors que je suis dessus depuis 2 jours).

Si vous voulez supprimer le topic, il n'y a pas de problème !

 

anything