2016-10-14 9 views
1

Linux上でOpenGLを使用して3Dゲームエンジンを構築しています。具体的には、私はlwjgl-2.9.3を使用しています(最新のバージョンはこの文書の執筆時点ではLinuxで利用できません)。私はWindows 10マシンでプロジェクトのいくつかをビルドしました。コンパイルしてうまく動作します。しかし、Windowsマシンをそのまま使用することはできません。自分のコンピュータはFedora 24を実行しています。Intel Core i3-4012Y CPUを搭載し、メサ12.0.3ドライバで内蔵グラフィックスを使用しています。これは専用のGPUを追加するオプションのないラップトップです。私はLinux上でのプロジェクトで作業しようとしたとき(正確に同じコード、私はWindowsコンピュータのオフにコピーされたものとは何かを変更していない)、Eclipseは私に、このエラーを与える:私は私のOpenGL /メサを確認 Mesa 12.0.3 LinuxでOpenGL GLSL 3.30がサポートされていません

0:1(10): error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES

この端末コマンドの情報は glxinfo | grep OpenGLです。

これは、そのコマンドの出力です:

OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Haswell
OpenGL core profile version string: 3.3 (Core Profile) Mesa 12.0.3
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 12.0.3
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.0 Mesa 12.0.3
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00
OpenGL ES profile extensions:

私のプログラムがコンパイルされませんなぜ私は理解していません。 12シリーズのMesaドライバは、OpenGL 4.xと最新のGLSLバージョンをサポートしているようですね。このプログラムをコンパイルできる方法はありますか?新しいドライバーを入手する必要がありますか?この記事を書いている時点で、私は絶対的な最新のドライバがあることを確信しています。

さらに、MesaドライバはFedora reposで提供されています。別にコンパイルしたものではありません。

私は完全に迷っているので、何か提案がありがたいです。ありがとうございました。

+0

[SIGGRAPH University: "OpenGLプログラミング入門"](https://www.youtube.com/watch?v=6-9XFm7XAT8)を見てみることをお勧めします。 – Flint

答えて

3

OpenGLコアコンテキストを要求する必要があります。

現在のバージョンのMesaでは、コアコンテキストを要求しないとOpenGL 3.0互換コンテキストが得られます。コアコンテキストを要求した場合は、OpenGL 3.3のコアコンテキスト(あるいはそれ以上)を取得し、GLSL 3.30を使用することができます。

同様の動作は、3.3または4.1のコアコンテキストを取得する点を除いて、macOSのOpenGLに適用され、そうでない場合は2.1のコンテキストが取得されます。

LWJGL Version Selectionを参照してください:

ContextAttribs contextAtrributes = new ContextAttribs(3, 2) 
    .withProfileCore(true); 

withForwardCompatible()を使用するためにwikiの提案を無視してください、その機能性はやや時代遅れです。

関連する問題