GLSLのversionディレクティブ一覧

提供: MonoBook
ナビゲーションに移動 検索に移動


GLSLでは「ソースコードの1行目」に「#version」ディレクティブを記述することで、そのソースコードの構文のバージョンを指定する。 ちなみに「#version」2行目以降に書くとエラーになる。このため「#ifdef」で分岐はできない。

GLSL[編集 | ソースを編集]

GLSLのバージョンはOpenGLのバージョンとともに上がっている。初期のころは双方のバージョンが大きく食い違い非常にわかりにくかった。OpenGL 3.3以降はOpenGLもGLSLも似たようなバージョン番号になった。

GLSLは恐ろしいことにバージョンごとの互換性がない。そもそもの構文が違うのである。しかもOpenGLはGLSLを実行時コンパイルしかできないので動かしてみるまで気が付かない(OpenGL4.6から事前コンパイルも可能になった)。まるでそびえ立つクソだ

GLSL
#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 ESWebGLで使用されるESSL (GLSL ES)のバージョン番号はOpenGLのグダグダっぷりを体現している。

恐ろしいことにESSL1.00とESSL3.00も構文レベルで互換性がない。 わずか2種類なのに別言語となっている。

これらを考慮するとHLSLで書いてESSLに変換するという手法がベストであろう。

ESSL (GLSL ES)
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)

関連項目[編集 | ソースを編集][編集 | ソースを編集]