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;
ウィンドウは正常に描画されます。
これが何が起こっているかのスクリーンショットです。
コンピューターの処理が遅かったため、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 コンテキストを作成して動作していたに違いありません。
なぜこれが起こっているのか、私は非常に混乱しています。