この件に関して多くのスレッドを見てきたので、ここで回答するのが良いと思いました。Intel ivybridgeでUbuntu 15.04を実行しています。「Linux 用インテル グラフィックス インストーラー」アプリケーションを使用した後、glxinfo は openGl に関する次の情報を提供します。
OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.6.0
OpenGL core profile shading language version string: 3.30
OpenGL version string: 3.0 Mesa 10.6.0
OpenGL shading language version string: 1.30
ここから、コアプロファイルと glsl バージョンが 3.3 であることがわかりますが、互換性のある openGl は 3.0 のみであるため、コードを 3.3 で実行する場合は、opengl コア プロファイルと glsl コア プロファイルの両方を指定する必要があります。freeglut と glew を使用している場合は、次の手順で機能します。
- glsl #version は、コア プロファイルが必要であることを指定する必要があります。
#version 330 core
glutInitContextVersion (3, 3);
- 最後に glewInit() の前に glewExperimental を true に設定します。
glewExperimental = GL_TRUE;
編集:
freeglutを使用しているほとんどの* nixユーザーに関連していると思われる言及を忘れていたのは、深さテスト、つまり、特定の視点からメッシュの何を描画する必要があるか(およびすべきでないか)に関するものです。
Linux で深度テストを使用するには、次の方法で深度テストを有効にする必要があるだけではありません。
(glEnable(GL_DEPTH_TEST);
ただし、深度バッファーを持つには、過剰なコンテキストを作成する必要もあります (通常、Windows には既定で深度バッファーがあるようですが、Linux にはありません)。
GLUT_DEPTH
freeglut を使用すると、glutInitDisplayModeに含める必要があることを意味します。これにより、深度バッファを持つコンテキストが作成されます。
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
ps私が取った大学のモジュールがそれを使って実行するためのデモコードを私たちに与えたので、私はfreeglutだけを使っています。それ以来、代わりにglfwに切り替えることをお勧めします。私の答えの最初の部分は、代わりに glfw メソッドを使用するだけで、ほとんど適用されます。