25

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

ここに画像の説明を入力

私が試したこと

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

追加の詳細

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

  • 私が使用しようとしているコードは、Visual Studio 2010およびCode::Blocksでエラーや警告さえも発生せずに動作します

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

  • 私はSFMLを自分でコンパイルしませんでした

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

  • 私のgccはDW2のものです

結果が得られません。リモートでこれを修正する方法さえわかりません。どこから始めればよいかさえわかりません。

編集 すべてのコードを表示することはできません.20以上のファイルがあり、それが私のコードではないことをほぼ90%確信しています.上記で述べました.IDEで警告やエラーなしでこのコードを実行できますqtクリエーターを除く。

4

6 に答える 6

28

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

違う:

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

良い:

 glutInitDisplayMode(GLUT_RGB);
 glewInit();

編集私はSFMLだと思います:

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

EDIT 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

幸運を ;)

于 2013-02-24T17:40:05.233 に答える
7

user3648895 のリクエストにより、コメントの外に回答を個別に投稿しています。

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

于 2015-02-08T00:45:06.740 に答える
7

glfw で glew を使用している場合は、glfwMakeContextCurrent( https://github.com/Cloudef/glhck/issues/15 )を使用します。

于 2017-05-11T00:51:20.473 に答える
1

SDL2 の Renderer 関数を使用している場合は、 の直後にする必要がありますSDL_CreateRenderer

于 2015-05-02T19:54:38.903 に答える