CPU 側から GPU プログラム(Vertex/Fragment 各シェーダ)へパラメータを渡すために利用される関数です。
参考 (YoYoGames):Shaders
この関数を利用する前に、GML が扱う変数と GPU 側の 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]