web-dev-qa-db-ja.com

GLEWの初期化に失敗しました。欠落GLバージョン

Qtクリエーターの最新バージョンでSFML 2.0をセットアップしようとしましたが、SFMLを正しくセットアップし、ビジュアルスタジオで書いた小さなゲームをインポートしました。コンパイルすると、私はこれを取得します:

enter image description here

私が試したもの

  • Qt SDK全体とqtクリエーターを再インストールするIDE最初から
  • SFMLの再インストール
  • mingwの再インストール
  • 自分のコードではないことを確認するために簡単なプログラムを作成しようとしましたが、プログラムは正しくコンパイルされますが、アプリケーションを閉じると、OpenGLエラーが発生し、正常ではありません
  • 私はSFMLフォーラムにスレッドを投稿しようとしましたが、役に立ちませんでした。
  • エラーをグーグルすると、いくつかの結果が表示されます。これは、OpenGLに固有であり、ローカライズされすぎているため、私には当てはまりません。SFML2.0で発生するこの問題に対する回答はありません。

追加の詳細

  • Windowsを実行していますXP SP3、mingwおよびqt SDKおよびSFMLの最新バージョン

  • 私が使用しようとしているコードは、Visual Studio 2010でエラーまたは警告なしで機能しますand Code :: Blocks

  • はい、私はSFMLが私のIDEに設定されていると確信しています。基本的なコードは機能しますが、それらのエラーを表示し、より高度なコードはすべてのスプライトとテキストをボックスとして表示します。
  • 私はSFMLを自分でコンパイルしませんでした

  • 私のgccバージョンは4.6.2です

  • 私のgccはDW2のものです

結果が出ません。どこから始めればよいのか、リモートでこれを修正する方法を知りません。

[〜#〜] edit [〜#〜]私はすべてのコードを表示することはできません。20ファイルを超えており、ほぼ90%は自分のコードではないことを確信しています。上記:qt作成者を除くすべてのIDEで警告やエラーさえ発生せずにこのコードを実行できます。

22
Bugster

これは、OpenGLを初期化していないためです。 lib過剰の例。

違う:

 glewInit();  // ERROR MISSING GL VERSION
 glutInitDisplayMode(GLUT_RGB); 

良い:

 glutInitDisplayMode(GLUT_RGB);
 glewInit();

[〜#〜] edit [〜#〜] SFMLだと思います:

 sf::Window   App(sf::VideoMode(400, 400, 32), "Window");
 glewInit();

編集2このコードをテストします。

#include <SFML/Window.hpp>
#include <iostream>
#include <GL/glew.h>

int
main(int, const char**)
{
    GLenum      err;

    std::cout << "Start" << std::endl;
    std::cout << "Test 1" << std::endl;
    if ((err = glewInit()) != GLEW_OK)
        std::cout << glewGetErrorString(err) << std::endl;

    std::cout << "Init window" << std::endl;
    sf::Window  app(sf::VideoMode(400, 400, 32), "Windows");

    std::cout << "Test 2" << std::endl;
    if ((err = glewInit()) != GLEW_OK)
        std::cout << glewGetErrorString(err) << std::endl;
    std::cout << "End" << std::endl;
    return 0;
}

私の出力:

Start
Test 1
Missing GL version
Init window
Test 2
End

コンパイル:g++ -W -Wall -Werror main.cpp -lsfml-window -lGLEW

幸運を ;)

24
Quentin Perez

User3648895のリクエストに応じて、コメントの外側に個別に回答を投稿しています。

SFMLの代わりにGLFWを使用する場合は、glfwMakeContextCurrentの後にglewInit()を呼び出す必要があります。

5
Syler

Glfwでglewを使用している場合は、glfwMakeContextCurrentを使用してください( https://github.com/Cloudef/glhck/issues/15

3
Telhar

SDL2のレンダラー関数を使用する場合は、SDL_CreateRendererの直後に配置する必要があります。

1
Codecat