OpenGL Shading Language
GLSL について

[GLSL 4.20] [GLSL 4.10] [GLSL 4.00]
[GLSL 3.30] [GLSL 1.50] [GLSL 1.40]
[GLSL 1.30] [GLSL 1.20] [GLSL 1.10] [GLSL 1.00]
[GLSL ES 1.00]


OpenGL Shading Language は glslang または GLSL と呼ばれる OpenGL 用のシェーダ言語です。 シェーダ言語はプログラマブルシェーダを記述するための高級言語です。

GLSL は C言語に良く似た文法ですが、CG に特化した拡張が行われている等、いくつかの違いがあります。

GLSL は上位互換の言語で、以前のバージョンに含まれる機能は、以降のバージョンで使用可能です。

GLSL ES 1.00 は、OpenGL ES 2.0 用のシェーダ言語です。 GLSL 1.10 を基に OpenGL ES 用に機能を制限、拡張を行っています。

  • GLSL 4.20


  • GLSL 4.20 は OpenGL 4.2 以降のバージョンで標準サポートしています。

    • ASCII から UTF-8 に変更
    • C++ のように '\' で行を継続

  • GLSL 4.10


  • GLSL 4.10 は OpenGL 4.1 以降のバージョンで標準サポートしています。


  • GLSL 4.00


  • GLSL 4.00 は OpenGL 4.0 以降のバージョンで標準サポートしています。


  • GLSL 3.30


  • GLSL 3.30 は OpenGL 3.3 以降のバージョンで標準サポートしています。
    GLSL 3.30 からは GLSL のバージョンナンバーを OpenGL のバージョンナンバーに揃えました。
    GLSL 1.50 から GLSL 3.30 の間で、削除または推奨しないものはありません。

    • GL_ARB_explicit_attrib_location 拡張機能
      レイアウト識別子(layout) は、バーテックスシェーダの入力、フラグメントシェーダの出力のロケーションを定義できます。
         例)
         layout(location = 3) in vec4 normal;
      
         バーテックスシェーダのユーザ入力変数 normal のロケーションを 3 にします。
         
         例)
         layout(location = 6) out vec4 colors[3];
      
         フラグメントシェーダのユーザ出力変数 colors のロケーションを 6, 7, 8 にします。
         
    • GL_ARB_shader_bit_encoding 拡張機能
      浮動小数点への signed/unsigned integer からの変換、または signed/unsigned integer への変換をサポート。
          genIType floatBitsToInt(genType value);
          genUType floatBitsToUint(genType value);
      
          genType intBitsToFloat(genIType value);
          genType uintBitsToFloat(genUType value);
         
    • #line の振る舞いを変更
      現在の行ではなく、コードの次の行の行番号を指定します。(これは C++ と一致します。)

  • GLSL 1.50


  • GLSL 1.50 は OpenGL 3.2 以降のバージョンで標準サポートしています。

    • ジオメトリシェーダのサポート


  • GLSL 1.40


  • GLSL 1.40 は OpenGL 3.1 以降のバージョンで標準サポートしています。

    GLSL 1.30 で推奨されないとしたものは GL_ARB_compatibility拡張機能をサポートしている場合にのみ使用できます。
    次の機能が追加されました。

    • inverse() をサポート
      逆行列を求める関数のサポート

    • 新しいサンプラーの追加
      SAMPLER2DRECT, SAMPLER2DRECTSHADOW, ISAMPLER2DRECT, USAMPLER2DRECT, SAMPLERBUFFER, ISAMPLERBUFFER, USAMPLERBUFFER

    • フラグメントシェーダのデフォルトの精度を hight に変更

      precision highp float;

      このため GL_FRAGMENT_PRECISION_HIGH マクロが定義されます。

      #define GL_FRAGMENT_PRECISION_HIGH 1


    • mix(), isnan(), isinf() がスカラー bool に対応




第3版

  • GLSL 1.30


  • GLSL 1.30 は OpenGL 3.0 以降のバージョンで標準サポートしています。

    次の機能が追加されました。

    • Integer をサポート
      • ネイティブ 符号付整数, 符号なし整数, ベクトル型, とオペレーション
      • ビットワイズシフトとマスク
      • テクスチャのインデックスリスト
      • テクスチャの戻り値
      • 整数型 uniform 変数、頂点の入力、頂点の出力、フラグメントの入力、フラグメントの出力
      • 組み込み関数のサポート: abs, sign, min, max, clamp, ...


    • 別のテクスチャをサポート
      • サイズクエリー
      • テクスチャアレイ
      • オフセット
      • Explicit LOD と派生しているコントロール


    • switch/case/default をサポート


    • 新しい組み込み関数のサポート: trunc(), round(), roundEven(), isnan(), isinf(), modf()


    • ハイパブリック三角関数のサポート


    • プリプロセッサトークン (##) のサポート


    • ユーザ定義フラグメント出力変数のサポート


    • シェーダ入力と出力の宣言をinとout


    • 改良された OpenGL ES との互換性


    • noperspective (linear interpolation) の追加


    • 新しい頂点入力 gl_VertexID の追加



    以下のものは推奨されません。(将来削除される機能です。)


    • attribute, varying キーワードの使用 (in と out に置き換え)


    • gl_ClipVertex (gl_ClipDistance に置き換え)


    • gl_FragData と glFragColor (ユーザ定義出力で代用)


    • 組み込み属性 (ユーザ定義頂点入力で代用) [OpenGL ES 2.0 相当]


    • ミックスモード(頂点処理またはフラグメント処理の固定機能パイプラインとシェーダとの組み合わせ) (全てシェーダに置き換え) [OpenGL ES 2.0 相当]


    • 全ての組み込みテクスチャ関数 (新しい名前のテクスチャ関数に置き換え)


    • 組み込み varying 変数: gl_FogFragCoord, glTexCoord (ユーザ定義変数で代用) [OpenGL ES 2.0 相当]


    • 組み込み関数: ftransform (頂点出力に invariant を付けて代用) [OpenGL ES 2.0 相当]


    • gl_DepthRange を除く、多くの組み込みステート [OpenGL ES 2.0 相当]


    • gl_MaxVaryingFloats (gl_MaxVaryingComponents で代用) [OpenGL ES 2.0 相当]




  • GLSL 1.10


  • GLSL 1.10 は OpenGL 2.0 以降のバージョンで標準サポートしています。
    GLSL の基本バージョンとなります。

    • 配列のサイズのパラーメタといくつかの制限


    • gl_FragData[n] をサポート
      GL_ATI_draw_buffers と GL_ARB_color_clamp_control(?) に基づいた マルチレンダーターゲットに対応しました。


    • #version #extension をサポート
      #version 110 を指定することが推奨されました。 #version を省略した場合は GLSL 1.10 となります。


    • 行列の組み込みステートに逆行列と転置行列をサポート
      行列の組み込みステートに逆行列と転置行列をサポートしました。


    • 組み込み関数に refract, exp, log を追加
      組み込み関数に refract, exp, log を追加しました。



  • GLSL 1.00


  • GLSL 1.00 は OpenGL 1.5 以降で GL_ARB_shader_object, GL_ARB_vertex_shader, GL_ARB_frament_shader, GL_ARB_shading_language_100 拡張機能をサポートしている環境で利用可能です。

    • バージョンは 1.00 ですが、標準化された最初のバージョンは GLSL 1.10 です。
      GLSL 1.00 はプレバージョンと考えた方が良いでしょう。
    • GLSL 1.10 とは一部仕様が異なっています。 特に GLSL 1.00 でなければらない特別な理由がない限り、GLSL 1.10 以降を使うべきです。

  • GLSL ES 1.00


  • GLSL ES 1.00 は、組み込み用の OpenGL ES 2.0 で標準でサポートしています。
    GLSL ES 1.00 は GLSL 1.10 を基に仕様が決められました。

    加えて、デスクトップ用の OpenGL でも、OpenGL 4.1 以降では OpenGL ES 2.0 互換プロファイルを使用することで、 GLSL ES 1.00 を使用することができます。 (GL_ARB_ES2_compatibility をサポートする環境では拡張機能としてサポートしています。)

    • #version 100 と記述すると、GLSL 1.00 ではなく GLSL ES 1.00 を指定したことになります。

[3D TOPメニュー]
[OpenGL] [irisGL] [VRML] [作品集] [イエローページ]
[書籍紹介] [DVD]
[この Web ページについて] [アンケート] [予定]
[OpenGLストア]

[Namazu TOPメニュー]