surface_create 関数で surface を作ったら、その surface を Draw の「ターゲット」に指定します。
if !surface_exists(User_Defined_Surface) //常に確認、無ければ作る { var sw,sh; sw=400; sh=200; // 矩形領域の大きさを定義 User_Defined_Surface = surface_create(sw,sh); // Surface を作るsurface_set_target(User_Defined_Surface);
// ターゲットにセット draw_clear_alpha(c_blue,1); // ターゲットを draw で塗りつぶす draw_text(0,0, "Try Draw"); // 試しに文字も書いてみたsurface_reset_target();
// ターゲットを解放 } else // Application Surface への処理として {draw_surface(User_Defined_Surface,mouse_x,0);
// 指定 surface を描画 };
Draw 関数は通常だと Application Surface に対してターゲットが定められているので、ターゲット切り替えを行わない場合は常に Application Surface へ描画を行います。
ターゲットの切り替えは
surface_set_target(User_Defined_Surface);
このように指定します。
これ以降、draw 関数は一時的にターゲットを surface に移して描画を行う機能となります。座標系もここからは一時的にターゲットが基準となり、ターゲットの矩形領域内における xy
座標を入力します。
surface への Draw が済んだら、速やかにターゲットを解放。
surface_reset_target();
関数に引数は不要で、Application Surface にターゲットが返されました。
これで surface の作成は終了。GPU メモリ上にリソースとして surface が存在するようになりました。
次の step からは if else の内 else に処理が渡り
draw_surface(User_Defined_Surface,mouse_x,0);
この draw_surface でユーザ定義 surface が application surface の上にレイヤーとして描画されます。surface の描画位置は毎回指定。
このサンプルではマウスのX
座標にだけ追従する。
surface はゲーム実行中に GM:Studio の描画機能を使って GPU メモリ上へスプライト的なリソースとしてテクスチャを作成する機能とも言えます。