3

OpenGL 2.x および 3.x のチュートリアルを試しています。プログラムはコンパイルおよびリンクされますが、次のような一見無害な行でセグメンテーション違反が発生します。

glGenBuffers (1, &m_buffer);

私は とでmain()始まります。OpenGL 1 プログラムは正常にコンパイルおよび実行されます。これは glew によってラップされた新しい関数のようです。glewInitglutInit

あるチュートリアルでは、他のことを試す前にこのテストを行う必要があると述べています。

if (false == glewIsSupported ("GL_VERSION_2_0"))

バージョン文字列を に変更しても、このテストは常に失敗しますGL_VERSION_1_0

#define GL_VERSION_1_3 1GL/gl.h でそのような定義が最も高く、GL/gl3.h または GL/GL3 ディレクトリはありません。

aptfreeglut3 と freeglut3-dev がインストールされており、mesa-common-dev、libglew-1.6、libgl1-mesa-dev もインストールされていますが、利用可能な libgl3* パッケージはないようです。

ここにいくつかのドライバー情報があります(私は独自のドライバーを持っていません。統合されたIntel Ivy BridgeグラフィックスとNvidiaの追加カードがあり、どちらもOpenGL 1.4と互換性があると信じています)

#> glxinfo | grep version
server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
OpenGL version string: 3.0 Mesa 9.0
OpenGL shading language version string: 1.30

これらすべてが私をかなり混乱させました。

インストールする必要がある特定の OpenGL2/3/4 パッケージはありますか、それとも理論的にはすべて (Ubuntu 用) で同じ開発パッケージですか?

glGenBuffers がバージョン 1.5 まで導入されなかったのに、なぜ GL_VERSION_1_3 が定義された最高のバージョンなのですか?

バージョン 1.0 でも glewIsSupported が失敗するのはなぜですか?

API を実際に実装するライブラリやドライバを持っていないという印象を受けましたが、glxinfo によるとそうしているように見え、開発ライブラリに問題があると思われますが、持っていませんそこで起こっていることの首尾一貫した絵。

基本的に、プログラムをコンパイル/リンク/実行するにはどうすればよいですか?

Ubuntu が優れた開発環境ではないことは承知していますが、ディストリビューションを変更するよう提案しないでください。方法があるに違いない!

4

1 に答える 1

3

私はとでmain()始まりますglewInitglutInit

いいえ。glutCreateWindow()返されるまで、現在の GL コンテキストは取得されません。その後、電話glewInit()をかけることができます。glewIsSupported()

このようなもの:

#include <GL/glew.h>
#include <GL/glut.h>

...

int main( int argc, char** argv )
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
    glutInitWindowSize( 300, 300 );
    glutCreateWindow( "OpenGL" );
    glewInit();
    ...
    return 0;
}
于 2013-08-12T17:25:59.293 に答える