2017-07-13 6 views
-3

は私のコードです:互換性が要求された場合のコアOpenGLコンテキスト?ここ

// 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; 
} 

私はそうのような上記のファイルをコンパイルします

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 

(まだメイクファイルを書くことに周りもらっていない)

これはtestという名前のバイナリを生成しますしかし、私はそれを実行すると、次の警告が表示されます:

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 

これは期待どおりの黒いウィンドウを作成しますが、私がSFML/Graphics.hppで描画機能を使用し始めると、それはsegfaultになります。これは、サンプルファイルをコンパイルしようとしたとき(同じエラーも表示されたため) 。

私はそれが(SFMLは、いくつかのレガシーコードを使用していますので、これは必須です)私の理解から、それは互換性のコンテキストを作成する必要がありますので、sf::ContextSettings::DefaultattributeFlagsだし、私のsf::ContextSettingsを作成します。

P.S.問題があれば、私はVoid Linuxを使っています。私はここでレポから使用したすべてのものの最新バージョンをインストールしました

+1

あなたの*実際の*ソースコードを表示してみませんか? – datenwolf

+1

コードは*質問に入ります。 *オフサイトリンクの背後にある*ではありません。そして、*テキスト*として投稿し、[mcve]にする必要があります。 –

+0

コード全体を投稿するのではなく、初期化部分だけをobviosulyに投稿します。 – HolyBlackCat

答えて

0

Ok、3.3の代わりにOpenGL 3.0を使用していたようです。互換性プロファイルをサポートしています。しかし、今はGLSL 3.30を使うことができません。それは大きな混乱ですので、SDL2、GLFW、Raylibを試してみましょう。

関連する問題