2011-12-30 10 views
2

私はLinuxでopenglプログラミングを少し演奏していますが、疑問があります。OpenGLヘッダーファイルのバージョン情報の不一致

OpenGLのバージョン文字列:2.1メサ7.11

私はこれが私のシステムサポートのOpenGL 2.1は、メサの実装を使用していることを意味を推測

glxinfoは、OpenGLのバージョンについては、以下の私に与えます。

#define GL_VERSION_1_1 1 
#define GL_VERSION_1_2 1 
#define GL_VERSION_1_3 1 
#define GL_ARB_imaging 1 

のでGL_VERSION_xxが1.4、1.5、2.0のために定義されていません。そして、

、私はから/ usr/GL/gl.hを見れば、私のようなものを見つけています。だから私の質問は、ヘッダーファイルにGLバージョンの定義が2.0以上(少なくとも)含まれていない理由です。 GL/gl.hヘッダーファイルをより適切なものに変更する必要がありますか?

私は、標準のubuntu Linuxインストールを使用しています。ここにglxinfoからいくつかのより多くの情報:

OpenGL vendor string: X.Org R300 Project 
OpenGL renderer string: Gallium 0.4 on ATI RV515 
OpenGL version string: 2.1 Mesa 7.11 
OpenGL shading language version string: 1.20 

フランチェスコ

答えて

3

あなたはOpenGLのバージョン、実際に実装され、どのようなヘッダファイル内に存在だとの間で分離する必要があります。 OpenGLヘッダファイルの内容は、通常、OpenGLに拡張システムがあるという理由から、何らかの種類の最小公約数です。 OpenGLの実装は、拡張ライブラリを介して機能を提供します。

これにより、拡張機能を必要とするプログラムは機能が低下しているシステムで実行することができ、「libGL.soで必要なシンボルglShaderSourceが解決しない」というエラーメッセージが表示され、ユーザーを混乱させる可能性があります、または互換性モードにドロップすることさえできます。

高いOpenGLのバージョンの機能を取得するための最も簡単な方法はGL/glew.h代わりのGL/gl.hを含めるためにダウン沸騰GLEWライブラリ(http://glew.sourceforge.net)を使用して、右のコンテキスト作成後glewInit()を呼び出すことです。

+0

したがって、ヘッダファイルに定義されているGL_VERSION_X_Xは問題ありません。すべてが実行時に決定されるからですか?奇妙に思えますが、私はあなたが正しいと思います... – Francesco

+0

@Francesco:ヘッダーファイルのGL_VERSION_X_Xマクロは、そのヘッダーファイルからどのOpenGLシンボル(トークンとプロシージャ)を取得できるかを示しています。コンパイル時に必要なすべてのシンボルがインストールされているヘッダーファイルに含まれていない場合、コンパイル時にいくつかのエラーを出す#ifndefマクロを追加するという考え方です。 – datenwolf

関連する問題