2016-11-13 9 views
5

現在、Ubuntu 16.04でOpenGLを使用しているプロジェクトで作業中です。この時点で、私はこれを解決するためにすべてを試したように感じるので、何をすべきか分かりません。私は運なしシェーダファイルにバージョンを調整したC++ OpenGLシェーディングバージョンエラー - GLSL xはサポートされていません[Ubuntu 16.04]

Failed to compile vertex shader! 
0:1(10): error: GLSL 4.50 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, 3.00 ES, 3.10 ES, and 3.20 ES` 

:私のシェーダは、単にコンパイルし、次のエラーを返しません何らかの理由

#version 450 coreなどですが、私は同じ結果を得ています。参考のため

、ここsudo glxinfo | grep "OpenGL"の出力です:

OpenGL vendor string: Intel Open Source Technology Center 
OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 520 (Skylake GT2) 
OpenGL core profile version string: 4.5 (Core Profile) Mesa 13.1.0-devel 
OpenGL core profile shading language version string: 4.50 
OpenGL core profile context flags: (none) 
OpenGL core profile profile mask: core profile 
OpenGL core profile extensions: 
OpenGL version string: 3.0 Mesa 13.1.0-devel 
OpenGL shading language version string: 1.30 
OpenGL context flags: (none) 
OpenGL extensions: 
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 13.1.0-devel 
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20 
OpenGL ES profile extensions: 

glxinfoからの出力は、OpenGLのコア4.5がインストールされている示して、なぜこれがサポートされていませんか?

また、プロジェクトで使用されているOpenGLの現在のバージョン:std::cout << "OpenGL version: " << glGetString(GL_VERSION) << std::endl;を見つけようとしましたが、結果として空白が返されました。

私は今までこの1つの問題に10時間を費やしていますので、助けてください!

編集: GLSLを完全に削除する(この部分)ことで、プロジェクト/ UbuntuにGLSLを使わないように強制する方法はありますか?

OpenGL ES profile version string: OpenGL ES 3.2 Mesa 13.1.0-devel 
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20 
OpenGL ES profile extensions: 
+0

[この](https://en.wikipedia.org/wiki/OpenGL_Shading_Language#Versions)表によると、私は、OpenGLの2つの異なるバージョンがありがとう? –

答えて

7

であなたのシェーダをコンパイルするだけでなく、それを有効にしてください、これがために働いたソリューションでした私:

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); 
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); 
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
+1

次回の提案として、あなたの問題を解決してうれしいです:完全なコードを投稿するか、いくつかの詳細を追加してください(あなたがglfwを使用しているとは思いません)。 –

+1

フィードバックいただきありがとうございます。そうするようにしてください。 –

-2

GLSLはOpenGLで使用されるシェーダ言語ですが、2つのバージョン番号は必ずしも一致しません。あなたの所属から、あなたはオンチップIntel GPUを使用しているようです。このチップのドライバは、私が知る限りOpenGL 4をまだサポートしていないMesaを通してqorksします。

Nvidiaカードをお持ちの場合は、OpenGLの最新バージョンをサポートする独自のNVidiaドライバをインストールすることができます。それ以外の場合は、言語の古いバージョンを使用するようにシェーダを変更する必要があります。

+0

をインストールしているようです これはIntelインテルグラフィックス(i7 Core/Skylake)を搭載したノートパソコンであるため、私はNVIDIAカードを持っていません - 私の知る限り、Intelからの最新リリースです。 'OpenGL core profile version string:4.5(Core Profile)Mesa 13.1.0-devel'という文字列を持っているのでOpenGL 4をサポートしているようですが、私は正直ではありませんか? –

3

コアプロファイルを明示的に求めていないようです。あなたのglxinfo出力が示すように、その互換性プロファイルコンテキスト(OpenGLの-3.0前には、「互換性」のプロフィールありませんでしたが、それは、このために議論の余地がポイントだ)サポートされていません。これがあなたを語っている

そのコアプロファイルを中明示的コアをマークされていない最高のバージョンは、OpenGL-3.0になるだろうことを、

OpenGL core profile version string: 4.5 (Core Profile) Mesa 13.1.0-devel 
OpenGL core profile shading language version string: 4.50 
OpenGL core profile profile mask: core profile 

...、これはあなたを伝えるん:V4.5までサポートされています

OpenGL version string: 3.0 Mesa 13.1.0-devel 
OpenGL shading language version string: 1.30 

したがってコアのプロフィールをリクエストするか、GL-3.0以下に固執していることをご承知ください。


これを比較すると、OpenGL-4をサポートするOpenGL実装(NVidia)がどのように検索されますか。Xでもコアプロファイル外:

OpenGL core profile version string: 4.4.0 NVIDIA 367.27 
OpenGL core profile shading language version string: 4.40 NVIDIA via Cg compiler 
OpenGL core profile context flags: (none) 
OpenGL core profile profile mask: core profile 
OpenGL version string: 4.5.0 NVIDIA 367.27 
OpenGL shading language version string: 4.50 NVIDIA 
+0

応答ありがとうございます 私は持っています定義された '#vers私のシェーダファイルに「イオン450コア」と表示されている場合、これがあなたが意味するものであれば、私はまだ同じ結果を得ています。 –

+0

@ NicolaiPrebensen:これは私の意図したことではありません。私は、OpenGLコンテキストを作成するときに、コアプロファイルコンテキストを要求する必要があるということを意味しました。 OpenGLのコンテキスト(あなたが使っているライブラリ/フレームワーク)をどのように作成しているのか、あなたは教えてくれませんでした。 GLUT、GLFW、SLMF、SDL、GTK、Qt plain Xlib/GLXですか?あなたのやり方を教えていただければ、それがコアプロファイルのコンテキストを選択する方法を教えてください。 – datenwolf

0

あなたはコアプロファイルを必要とする4.5の機能を使用する場合、それは、この出力ライン

OpenGL core profile version string: 4.5 (Core Profile) Mesa 13.1.0-devel 

他の出力ラインに応じてお使いのシステムでサポートされてい

OpenGL version string: 3.0 Mesa 13.1.0-devel 

あなたが2つの異なるOpenGLドライバを持っていても、コアプロファイルなしでOpenGL 3.0のトップを買う余裕があるわけではありません。コアプロファイル機能を使用するためには

が同じ問題を経験して他の誰のために正しいプリプロセッサディレクティブ

// Example using glut for context initialization 
glutInitContextVersion(4, 5); 
glutInitContextProfile(GLUT_CORE_PROFILE); 
glutInit(&argc, argv); 

// Shaders 
#version 450 
... 
+0

Hmm。私はこれらの機能を見つけることができないので、いくつかのライブラリが欠けているようです。 –

+0

@ NicolaiPrebensenコンテキストを作成してバインドするコードはプラットフォームに固有のものです。[this post](http://stackoverflow.com/a/879128/1938163) –

+0

@NicolaiPrebensenこれを行うこともできます私はそれを自分で試したことはありませんが、裸X11/Xlib [datenwolfでこの例](http://stackoverflow.com/a/17608618/1938163)のように –

-1

は、シェーダ内の次のコードを試してみてください。

「#version 320個のES

精度mediump float;

...あなたのコード "

+2

これがなぜ役立つかについて少し説明を加えた方がよいでしょう。 – DaveyDaveDave

関連する問題