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

Auteur Sujet: SFML et OpenGL, fenêtre qui se ferme aussitôt  (Lu 2068 fois)

0 Membres et 1 Invité sur ce sujet

Koseki

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
SFML et OpenGL, fenêtre qui se ferme aussitôt
« le: Mai 14, 2018, 12:24:12 am »
Bonjour/Bonsoir,

J'essais de faire fonctionner OpenGL avec la SFML, mais j'ai un petit soucis au lancement de l'application.
Plutôt que de m'afficher mon joli petit triangle, la fenêtre se ferme tout simplement dès le lancement de l'application sans aucune erreur.

J'ai tester sf::Event::Closed pour voir et effectivement, l'événement est appelé dès le début de l'application...
La SFML Aurait un système qui fait que si rien est affiché la fenêtre se ferme automatiquement?
J'ai essayer d'afficher un shape et la fenêtre reste bien ouverte avec seulement le shape d'affiché...

Fait très étrange, si je place ce code avant ma boucle mais sans draw le shape:
sf::CircleShape shape(50);
shape.setFillColor(sf::Color(100, 250, 50));

L'application se lance et m'affiche bien le triangle... Il n'y a pas moyen de garder la fenêtre ouverte autrement?

#include <iostream>

#include <glm/glm.hpp>
#include <GL/glew.h>
#include <SFML/OpenGL.hpp>

#include "SFML/Graphics.hpp"
#include "include/Engine/Engine.hpp"
#include "include/Engine/SystemEngine.hpp"
#include "include/RessourceManager/RessourceManager.hpp"

int main()
{
    sf::ContextSettings settings;
    settings.depthBits = 24;
    settings.stencilBits = 8;
    settings.antialiasingLevel = 4;
    settings.majorVersion = 3;
    settings.minorVersion = 0;

    sf::RenderWindow window(sf::VideoMode(200, 200), "Pymous Project", sf::Style::Default, settings);
    window.setVerticalSyncEnabled(true);

    Engine::getInstance();
    SystemEngine::getInstance().setWindow(&window);

    GLenum initialisationGLEW( glewInit() );
    if(initialisationGLEW != GLEW_OK)
    {
        AbstractLogger::log().setLogger(new FileLogger("Logs/GlewReports.log"));
        AbstractLogger::log() << "Une erreur est survenu lors de l'initialisation de glew.";
        return -1;
    }

    float vertices[] = {-0.5, -0.5, 0.0, 0.5, 0.5, -0.5};

    bool running = true;
    while(running)
    {
        SystemEngine::getInstance().updateEvents();

        if(SystemEngine::getInstance().getWindowEvents().windowClosed)
        {
            std::cout << "On demande la fermeture de l'application" << std::endl;
            running = false; // On ferme la fenêtre
        }
        if(SystemEngine::getInstance().getWindowEvents().windowResized)
            glViewport(0, 0, SystemEngine::getInstance().getWindowEvents().windowSize.x, SystemEngine::getInstance().getWindowEvents().windowSize.y);

        window.setActive(true);

        glClear(GL_COLOR_BUFFER_BIT);

        glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, vertices);
        glEnableVertexAttribArray(0);
        glDrawArrays(GL_TRIANGLES, 0, 3);

        glDisableVertexAttribArray(0);

        window.display();

        window.setActive(false);

        SystemEngine::getInstance().resetAllEvents();
    }

    RessourceManager::destroy();
    Engine::destroy();

    return 0;
}
 

Merci et bonne soirée!

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: SFML et OpenGL, fenêtre qui se ferme aussitôt
« Réponse #1 le: Mai 14, 2018, 06:35:10 am »
A part des appels à tes singletons ce code ne montre pas grand chose. Fais plutôt un code complet minimal qui reproduit le problème (pas trop difficile à faire a priori vu le souci).

Ta gestion des évènements m'a l'air particulièrement louche.
Laurent Gomila - SFML developer

Koseki

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re: SFML et OpenGL, fenêtre qui se ferme aussitôt
« Réponse #2 le: Mai 14, 2018, 10:54:19 am »
Merci Laurent, il manquait juste une initialisation de mon coter.
Mais du coup, c'est bizarre que le simple fait de déclarer un shape avait résolu mon problème :o

Sinon j'ai remarquer un légère fuite mémoire. J'ai essayer avec le code minimal qu'il y a sur vos tuto et j'ai encore une fuite d'environ 8 octets par seconde. J'ai cru lire dans mes recherches que ça pourrait venir des pilotes graphique mais dans ce cas le problème ne peux pas être résolu facilement? (Ayant déjà la dernière version de mes pilotes Nvidia)

Sinon merci Laurent, désoler de t'avoir embêter avec un problème qui venait de chez moi ;)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: SFML et OpenGL, fenêtre qui se ferme aussitôt
« Réponse #3 le: Mai 14, 2018, 11:08:48 am »
Citer
Mais du coup, c'est bizarre que le simple fait de déclarer un shape avait résolu mon problème
Il ne faut pas chercher des explications lorsque tu es dans le domaine du comportement indéfini (comme c'était certainement le cas ici). Lorsque le comportement est "indéfini", comme son nom l'indique, il se peut se produire n'importe quoi.

Citer
Sinon j'ai remarquer un légère fuite mémoire. J'ai essayer avec le code minimal qu'il y a sur vos tuto et j'ai encore une fuite d'environ 8 octets par seconde. J'ai cru lire dans mes recherches que ça pourrait venir des pilotes graphique mais dans ce cas le problème ne peux pas être résolu facilement?
Il est très peu probable que ce soit SFML qui fuie, surtout avec le code de base du tutoriel. Si tu veux en avoir le coeur net, tu peux investiguer plus en profondeur avec des outils dédiés.

Citer
désoler de t'avoir embêter avec un problème qui venait de chez moi
Dans 99% des posts du forum, le problème vient de l'utilisateur et non de SFML. Et heureusement ;D
Laurent Gomila - SFML developer