Intelグラフィックカードを搭載したラップトップで開発しているときに、頂点シェーダーをコンパイルしているときに、次のようになりました。
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
わかりました。バージョン300ESを使用するようにシェーダーを調整します。その間、現在のドライバー/カードがサポートしているGLSLバージョンを確認したいので、これを使用します。
glGetString ( GL_SHADING_LANGUAGE_VERSION )
残念ながら、これは「1.30」のみを返します。
完全なリストを取得するにはどうすればよいですか?または、完全なリストではない場合でも、標準のGLサポートされているバージョン、およびGLESでサポートされているバージョンを取得するにはどうすればよいですか?
デスクトップGLでは、GLバージョンとGLSLバージョンの間のマッピングは次のとおりです。
_GL version GLSL version
2.0 1.10
2.1 1.20
3.0 1.30
3.1 1.40
3.2 1.50
3.3 3.30
4.0 4.00
4.1 4.10
4.2 4.20
4.3 4.30
4.4 4.40
4.5 4.50
...
_
したがって、GL 3.3から、バージョン番号は「同期」されて作業が楽になります。また、明示的なバージョン1.00がないことにも注意してください。これは、シェーダーが=の拡張として開発されたときに利用可能でした。 GL1.x。ただし、これはOpenGLのコア機能ではなかったため、バージョンはここで1.10から始まります(_#version
_ディレクティブがない場合のデフォルトでもあります)。シェーダーで)_#version 100
_をリクエストすると、GLSL 1.00[〜#〜] es [〜#〜]を取得します。
リストされたGLSLバージョンをサポートする必要があることに加えて、GL実装も古いバージョンをサポートする必要があることに注意してください。たとえば、 OpenGL 4.5コアプロファイル仕様 では、以下が述べられています(私の強調):
OpenGL 4.5の実装は、OpenGLシェーディング言語のバージョン4.50をサポートすることが保証されています。その仕様のセクションへのすべての参照は、そのバージョンを参照しています。セクション22.2で説明されているように、サポートされている最新バージョンのシェーディング言語を照会できます。 OpenGL 4.5のコアプロファイルは、バージョン1.40に戻るOpenGLシェーディング言語の以前のすべてのバージョンをサポートすることも保証されています。一部の実装では、コアプロファイルも以前のバージョンのシェーディング言語をサポートし、バージョン1.40以前のシェーディング言語の互換性プロファイルバージョンをサポートする場合があります。この場合、コアプロファイルAPIでサポートされていない互換性プロファイルビルトインなどの言語機能を使用すると、エラーが生成されます。
OpenGL ESの場合、同様のことが当てはまります。
_GLES version GLSL version
2.0 1.00 ES
3.0 3.00 ES
3.1 3.10 ES
_
OpenGL ES 3.1の実装は、OpenGL ESシェーディング言語のバージョン3.10、3.00、および1.00をサポートすることが保証されています。
ここでも、デスクトップGLで使用できるGLSLESのバージョンを知りたい場合があります。したがって、最新のGLの場合、これは非常に簡単です。 GL 4.5仕様をもう一度引用するには:
OpenGL 4.5の実装は、OpenGL ESシェーディング言語のバージョン1.00、3.00、および3.10をサポートすることが保証されています。
デスクトップのGLESに固有の機能のサポートGL(GLSLのESバリアントなど)は、通常、「互換性」拡張機能を介して処理されます。
GL_ARB_ES2_compatibility
_ 、コア内GL 4.1GL_ARB_ES3_compatibility
_ 、コア内GL 4.3GL_ARB_ES3_1_compatibility
_ 、コア内GL 4.5これで、実装はGL 3.0のみを提供し、ES互換性拡張をサポートする可能性があります。
GL 4.3)なので、サポートされているGLSLバージョンのallのリストを glGetStringi(GL_SHADING_LANGUAGE_VERSION,...)
を介して簡単にクエリできます。 。それ以前のバージョンの場合、GLバージョン番号と拡張文字列をチェックして、サポートが保証されているバージョンを推測する必要があります(ただし、実装は引き続きサポートする場合があります)もっと)。