2017-07-13 3 views
-3

Voici mon code:Contexte de base OpenGL lorsque la compatibilité est demandée?

// Display.cpp 

#include <memory> 
#include <SFML/Graphics.hpp> 
#include <GL/glew.h> 

namespace Display 
{ 
    constexpr static int WIDTH = 1280; constexpr static int HEIGHT = 720; 

    std::unique_ptr<sf::RenderWindow> window; 
    void init() { 
     sf::ContextSettings settings; 
     settings.depthBits = 24; 
     settings.majorVersion = 3; 
     settings.minorVersion = 3; // OpenGL 3.3 
     settings.attributeFlags = sf::ContextSettings::Default; 

     window = std::make_unique<sf::RenderWindow>(sf::VideoMode(WIDTH, HEIGHT), 
                "Fcku", 
                sf::Style::Close, 
                settings); 
     glewInit(); 
     glViewport(0, 0, WIDTH, HEIGHT); 
    } 

    void close() { 
     window->close();  
    } 

    void clear() { 
     glClearColor(0.0, 0.0, 0.0, 0.0); 
     glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 
    } 

    void update() { 
     window->display(); 
    } 

    void checkForClose() { 
     sf::Event e; 
     while (window->pollEvent(e)) 
      if (e.type == sf::Event::Closed) close(); 
    } 

    bool isOpen() { 
     return window->isOpen(); 
    } 

} // namespace Display 

int main() 
{ 
    Display::init(); 

    while (Display::isOpen()) { 
     Display::clear(); 
     Display::update(); 

     Display::checkForClose(); 
    } 
    return 0; 
} 

je compile les fichiers ci-dessus comme ceci:

g++ Display.cpp -Wall -O2 --std=c++14 -fexceptions -o test.o -lsfml-graphics -lsfml-audio -lsfml-network -lsfml-window -lsfml-system -lGL -lGLU -lGLEW -DGLEW_STATIC 

(ont pas eu l'occasion d'écrire un makefile encore)

Cela produit un binaire nommé test mais quand je le lance, je reçois l'avertissement suivant:

Warning: The created OpenGL context does not fully meet the settings that were requested 
Requested: version = 4.1 ; depth bits = 24 ; stencil bits = 0 ; AA level = 0 ; core = false ; debug = false ; sRGB = false 
Created: version = 3.3 ; depth bits = 24 ; stencil bits = 0 ; AA level = 0 ; core = true ; debug = false ; sRGB = false 

Cela crée une fenêtre noire (comme prévu) mais je suspecte qu'une fois que je commencerai à utiliser les fonctions de Dessin dans SFML/Graphics.hpp cela segfault, parce que cela s'est produit quand j'ai essayé de compiler un fichier exemple (il a imprimé la même erreur) .

Quand je crée mon sf::ContextSettings je l'ai mis à attributeFlags est sf::ContextSettings::Default si je comprends bien, il devrait créer un contexte de compatibilité (depuis SFML utilise un code hérité c'est un must).

P.S. Si c'est important, je suis sur Void Linux et j'ai installé les versions les plus à jour de tout ce que j'ai utilisé ici des dépôts

+1

Que diriez-vous de nous indiquer votre code source * actuel *? – datenwolf

+1

Le code va * dans * la question. * Pas * derrière les liens hors site. Et il devrait être publié en tant que * texte * et être un [mcve]. –

+0

Nous ne vous de poster le code entier, juste la partie d'initialisation obviosuly. – HolyBlackCat

Répondre

0

Ok, il semble que la solution était d'utiliser OpenGL 3.0 au lieu de 3.3, qui supporte le profil de compatibilité. Mais maintenant je ne peux pas utiliser GLSL 3.30 et c'est un gros bordel, alors je vais essayer SDL2, GLFW et Raylib.