3

SFML を使用してコンテキストを作成し、OpenGL 3.0 を使用して 3D アプリケーションに取り組んできました。OpenGL 3.0 を使用してコンテキストを作成しようとすると、何らかの理由で画像がわずかに狭くなり、その間に黒いバーが表示され、画面が何らかの理由で赤ではなく緑でクリアされるようです。コンテキストを 2.1 に変更すると、正常に描画されます。当初、私は最新の OpenGL コードを使用してこの問題を抱えていましたが、問題がより明確になるように、固定関数パイプラインを使用したサンプルを提供しました。

#include <SFML/Window.hpp>
#include <SFML/OpenGL.hpp>

int main()
{
    // create the window
    sf::ContextSettings settings;
    settings.depthBits = 24;
    settings.stencilBits = 8;
    settings.antialiasingLevel = 4;
    settings.majorVersion = 3;
    settings.minorVersion = 0;

sf::Window window(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, settings);

// load resources, initialize the OpenGL states, ...
glClearColor(1.0, 0.0, 0.0, 1.0);

// run the main loop
bool running = true;
while (running)
{
    // handle events
    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
        {
            // end the program
            running = false;
        }
    }

    // clear the buffers
    glClear(GL_COLOR_BUFFER_BIT);

    // draw...
    glBegin(GL_TRIANGLES);
    glVertex3f( 0.0, 1.0, 0.0);
    glVertex3f(-1.0,-1.0, 0.0);
    glVertex3f( 1.0,-1.0, 0.0);
    glEnd();

    // end the current frame (internally swaps the front and back buffers)
    window.display();
}

return 0;
}

これらの2行を変更すると:

   settings.majorVersion = 3;
   settings.minorVersion = 0;

これらに:

   settings.majorVersion = 2;
   settings.minorVersion = 1;

ウィンドウは正常に描画されます。

これが何が起こっているかのスクリーンショットです。 OpenGL 2.1 スクリーンショット OpenGL 3.0 のスクリーンショット

コンピューターの処理が遅かったため、2 番目の画像は少し乱れています。オレンジ色のトーンであってはなりません。

私のセットアップは次のとおりです。

Ubuntu 12.10 インテル i7-3630QM インテル HD グラフィックス 4000

glxinfo から: OpenGL レンダラー文字列: Mesa DRI Intel(R) Ivybridge Mobile OpenGL バージョン文字列: 3.0 Mesa 9.0.2 OpenGL シェーディング言語バージョン文字列: 1.30

lspci から: 使用中のカーネル ドライバー: i915

これはドライバーの問題かもしれないと思いましたが、GLUT を使用して非推奨の機能を使用せずに OpenGL 3.0 プログラムを実行できたので、有効な OpenGL 3.0 コンテキストを作成して動作していたに違いありません。

なぜこれが起こっているのか、私は非常に混乱しています。

4

1 に答える 1