2D サンプラーのバインド用関数。シェーダ上で2枚以上のテクスチャを同時に扱う場合利用します。
Tweet
この関数を利用する場合、注意点として
- シェーダが利用可能であること
- シェーダコード側で uniform 変数が定義済みであること
- バインドの後、変数へ値を直接代入しないこと(専用関数を使います)
上記三つが挙げられます。
参考 (YoYoGames):shader_get_sampler_index(shader, uniform);
shader_get_sampler_index
関数には引数として二つ与えます。
- シェーダ名(リソースツリーに登録された名前、文字列にあらず)
- シェーダで定義された 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”」を関連付けしました。
[divpage]