「GLSLのversionディレクティブ一覧」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
(ページの作成:「 GLSLでは「ソースコードの1行目」に「#version」ディレクティブを記述することで、そのソースコードの構文のバージョン…」)
 
 
87行目: 87行目:
 
== ESSL (GLSL ES) ==
 
== ESSL (GLSL ES) ==
 
一方、[[OpenGL ES]]と[[WebGL]]で使用されるESSL (GLSL ES)のバージョン番号は[[OpenGL]]のグダグダっぷりを体現している。
 
一方、[[OpenGL ES]]と[[WebGL]]で使用されるESSL (GLSL ES)のバージョン番号は[[OpenGL]]のグダグダっぷりを体現している。
 +
 +
恐ろしいことにESSL1.00とESSL3.00も構文レベルで互換性がない。
 +
わずか2種類なのに別言語となっている。
 +
 +
これらを考慮すると[[HLSL]]で書いてESSLに変換するという手法がベストであろう。
 +
* [[MacでDirectX Shader Compilerをビルドする]]
 +
* [[DirectX Shader CompilerでSPIR-Vを出力する]]
 +
* [[SPIR-VからGLSLを生成する]]
 +
 
{| class="wikitable"
 
{| class="wikitable"
 
|+ESSL (GLSL ES)
 
|+ESSL (GLSL ES)

2019年11月6日 (水) 00:38時点における最新版


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)

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

カテゴリ:

  • GLSL
  • OpenGL
  • Vulkan