2D サンプラーのバインド用関数。シェーダ上で2枚以上のテクスチャを同時に扱う場合利用します。

このエントリーをはてなブックマークに追加

この関数を利用する場合、注意点として

  1. シェーダが利用可能であること
  2. シェーダコード側で uniform 変数が定義済みであること
  3. バインドの後、変数へ値を直接代入しないこと(専用関数を使います

上記三つが挙げられます。

参考 (YoYoGames):shader_get_sampler_index(shader, uniform);

shader_get_sampler_index 関数には引数として二つ与えます。

    1. シェーダ名(リソースツリーに登録された名前、文字列にあらず
    2. シェーダで定義された uniform 変数の名前(を文字列として

GPU 側の変数名と CPU 側の変数名を関連付けする手続きなので、あらかじめシェーダ側で uniform 変数の定義が必要。

この関数はテクスチャを同時に2枚以上扱う予定が無い場合には利用されません。シェーダでテクスチャを同時に複数扱い、テクスチャを合成する処理などで利用されます。

以下サンプルコードは Photoshop のブレンドモードから「スクリーン」を GLSL ES で再現するためのシェーダを利用する際に、GML 側から必要と成るバインド処理例。

///Init_Shader_Blendmode_Screen();
/* Create Event のタイミングで一度だけ実行されます */
var a,b;
a = SH_Blendmode_Screen;
    if !shader_is_compiled(a) {
         b = "Ur hardware ain't support shader - SH_Blendmode_Screen";
         show_message( b );
    }
    else{
         b         = "u_TexSampler";
         U_sampler = shader_get_sampler_index(a, b);
    };

上記サンプルコードでは GML 側の変数「U_sampler」に対して GPU 側の uniform 変数「”u_TexSampler”」を関連付けしました。

次のページへ


Leave a Reply

Your email address will not be published. Required fields are marked *