CPU 側から GPU プログラム(Vertex/Fragment 各シェーダ)へパラメータを渡すために利用される関数です。

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

参考 (YoYoGames):Shaders

この関数を利用する前に、GML が扱う変数と GPU 側の uniform 変数とを適切に関連付けする処理が行われていなければなりません。

関連:(GML)shader_get_uniform 関数

型の概念が異なる点に注意

GPU に浮動小数点値を渡すための関数ですが、GML は型の概念があいまいで、数値は整数と少数の区別すら普段から強くは意識されていません。しかしシェーダ記述言語である GLSL ES は型の概念が厳密で、型を無視したデータ型の受け渡しはできません。キャスト(明示的型変換)が必須となります。

GLSL ES にある行列やベクトルといった各変数型も GML では普段扱っていません。このように、型の概念が違う言語同士でコミュニケーションを取らなければならないため、型の概念のあいまいなまま使っている GML ユーザ側がより厳密な型指定を必要としている GLSL ES 側のルールへ寄り添う必要があります。

値を送信するための GML 関数も変数型に応じて使い分けます。

関数
shader_set_uniform_f 浮動小数点型/vec4 に対応
shader_set_uniform_f_array 浮動小数点型の数値を格納した配列
shader_set_uniform_i 整数値型/vec4 に対応
shader_set_uniform_i_array 整数値を格納した配列
shader_set_uniform_matrix 行列( 3D を扱う場合のみ
shader_set_uniform_matrix_array 行列(4×4の正方行列なら浮動小数点型で16の配列要素


浮動小数点型が基本ですが、浮動少数/整数ともにベクトル型(vec2 〜 vec4 まで)に対応しています。

サンプルコード

var a,b,c;
a       = Shader_Pass_Through; // Shader
b 	= "u_ratio";           // uniform variable Name
c       = 1.5;                 // sample value
U_ratio = shader_get_uniform(a, b);

shader_set(a);
    shader_set_uniform_f( U_ratio , c );
    draw_self();
shader_reset();

次のページへ

[divpage]

Leave a Reply

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