2017-11-27 12 views
0

GLEWを設定するとき、ウィンドウコンテキストが作成された後に初期化する必要があります。私は以下でこれを行いましたが、問題はglGenBuffers()などの呼び出しでアクセス違反が発生することです。エラーチェックもオフに設定されていません。それはGLEW初期化の配置/ RenderWindowの作成方法に起因するのでしょうか?クラスを使わずにmain()関数にコードを入れても問題ありません。正しい順番でGLEW初期化を使用してglGenBuffers()でアクセス違反

Engine() : sf::RenderWindow(){ 
     // setup the SFML renderwindow 
     string windowTitle = "OpenGL"; 

     sf::ContextSettings contextSettings; 
     contextSettings.antialiasingLevel = 4; 
     contextSettings.depthBits = 64; 

     sf::RenderWindow::create(sf::VideoMode(800, 600), windowTitle, sf::Style::Resize | sf::Style::Close, contextSettings); 

     // setup GLEW 
     glewExperimental = GL_TRUE; 
     GLenum err = glewInit(); 
     if(err != GLEW_OK){ 
      printf("ERROR: GLEW failed to initialize.\n"); 
      exit(1); 
     } 
     glViewport(0, 0, sf::RenderWindow::getSize().x, sf::RenderWindow::getSize().y); 
     ... 
} 
+0

すべてが正常だった主な機能として表示してください – Jeka

答えて

0

glewExperimental = GL_TRUE;を使用しないでください。これは、コアプロファイルでOpenGLコンテキストを作成し、glewで使用する場合に特に使用されます。あなたのケースでは、デフォルトでライブラリに作成されたコンテキストのタイプを残しています。これは、デフォルトでは、ほとんどの場合、ライブラリのウィンドウ作成機能によって作成され、ほとんどは互換性のあるコンテキストになります。それがうまくいかない場合は、使用しているライブラリでコンテキストを作成し、コアプロファイルにコンテキストを作成し、glewExperimental = GL_TRUE;と入力してください。

glutには、特定のバージョンとコアプロファイルでコンテキストを作成する機能があります。そのためには、その機能を備えている必要があります。 4.1バージョンを言うと、私はこの方法のみ/表示ウィンドウを作成するウィンドウクラスを作成しますが、ないを作成することを疑うglewExperimental = GL_TRUE;に呼び出しを削除し、

+0

私は自分のエラーがどのようにRenderWindowを作成するのかと思います。私はちょうどウィンドウをmain()で作成し、それを表示するためにレンダリング関数に渡し、そこでうまく動作するように設定しました。 – Inzuki

+0

申し訳ありません私はあなたが言っていることを得ていない –

0

を参照してください

glewExperimental = GL_TRUE; 
    GLenum err = glewInit(); 
    if(err != GLEW_OK){ 
    printf("ERROR: GLEW failed to initialize.\n"); 
    exit(1); 
} 

を使用してコアプロファイルに特異的にコンテキストを作成します。それは問題かもしれません。 glewInitが呼び出される前にウィンドウが表示されていることを確認してください

関連する問題