GLSLのversionディレクティブ一覧
GLSLでは「ソースコードの1行目」に「#version」ディレクティブを記述することで、そのソースコードの構文のバージョンを指定する。 ちなみに「#version」2行目以降に書くとエラーになる。このため「#ifdef」で分岐はできない。
GLSL[編集 | ソースを編集]
GLSLのバージョンはOpenGLのバージョンとともに上がっている。初期のころは双方のバージョンが大きく食い違い非常にわかりにくかった。OpenGL 3.3以降はOpenGLもGLSLも似たようなバージョン番号になった。
GLSLは恐ろしいことにバージョンごとの互換性がない。そもそもの構文が違うのである。しかもOpenGLはGLSLを実行時コンパイルしかできないので動かしてみるまで気が付かない(OpenGL4.6から事前コンパイルも可能になった)。まるでそびえ立つクソだ。
#version | GLSL | OpenGL | |
---|---|---|---|
無指定 | 1.0 | OpenGL 1.5 | |
#version 110 | 1.10 | 2.0 | |
#version 120 | 1.20 | 2.1 | ESSL 1.00 相当 |
#version 130 | 1.30 | 3.0 | |
#version 140 | 1.40 | 3.1 | |
#version 150 | 1.50 | 3.2 | |
#version 330 | 3.30 | 3.3 | ESSL 3.00 相当 |
#version 400 | 4.00 | 4.0 | |
#version 410 | 4.10 | 4.1 | |
#version 420 | 4.20 | 4.2 | |
#version 430 | 4.30 | 4.3 | |
#version 440 | 4.40 | 4.4 | |
#version 450 | 4.50 | 4.5 | |
#version 460 | 4.60 | 4.6 |
ESSL (GLSL ES)[編集 | ソースを編集]
一方、OpenGL ESとWebGLで使用されるESSL (GLSL ES)のバージョン番号はOpenGLのグダグダっぷりを体現している。
恐ろしいことにESSL1.00とESSL3.00も構文レベルで互換性がない。 わずか2種類なのに別言語となっている。
これらを考慮するとHLSLで書いてESSLに変換するという手法がベストであろう。
ESSL | OpenGL ES | WebGL | ベースGLSL | |
---|---|---|---|---|
#version 100 es | ESSL 1.00 | OpenGL ES 2.0 | WebGL 1.0 | GLSL 1.20
(OpenGL 2.1) |
#version 300 es | ESSL 3.00 | OpenGL ES 3.0 | WebGL 2.0 | GLSL 3.30
(OpenGL 3.3) |