surface はゲーム実行中に GM:Studio の描画機能を使って GPU メモリ上へスプライト的なリソースとしてテクスチャを作成する機能とも言えます。

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

[column width=”20%” spacing=”5%”]

[/column]
[column width=”60%”]しかし搭載されているメモリというハードウェアのリソースは有限で、他アプリケーションも GPU メモリの領域は必要とするため、一つのアプリケーションで GPU メモリを過剰に専有しないよう設計されています。[/column]
[end-columns]

GM:Studio で作成された surface は application surface と異なり volatile (きまぐれな)なものであり、GPU メモリから自動的に破棄されてしまう可能性があります。

作っても勝手に消えるものだからある意味安心ではありますが、一度メモリ上に作成した Surfaces は、自分で確保して不要になったら自分で破棄する処理も意識して作ったほうがメモリ管理的には安心です。

スコープが global. な変数で Surfaces を管理する方法を最初になるべく推奨するのは、メモリ管理の観点から言うと Surfaces の管理にはグローバルな変数スコープが必要になるからです。

動画で観る Surfaces の使い方

Youtube で公開されている HeartBeast の [GameMaker Tutorial] Surfaces (Basics) という動画が内容も簡潔でたぶん一番参考になります。動画ではメモリに確保された Surfaces を破棄するイベントとアクションも紹介されています。

Surfaces は使い方次第でスプライトよりも処理効率の良い描画結果を得られます。

GPU にテクスチャとして作るためテクスチャサイズの制限は受けますが、エフェクトやオブジェクト動作の軌跡を描画したり、ビジュアル的にリッチなゲームを作るためにはいずれ使いこなせるようになりたい機能として Surfaces は挙げられます。

また Surfaces は GML からのアクセスがメインとなるためアイコンからの動作選択では自ずと限界があります。つまり GML をある程度以上使いこなす人が Surfaces を使いこなせます。

内容的には初心者向けではなく「自称/初心者以上」の技術は必要になっているのだと思います。

筆者の場合、確保した Surfaces が消えちゃう仕様があるから、その部分が管理上(そしてそれを説明する上でも)ややこしいかなと感じます。

GM:S の Surfaces は資料が英語でもあまり豊富には無く、筆者も調べる上で少し工夫する必要があったため、最終的に XNA や MSDN といった母数のより大きな技術系サイトからドキュメントを選んでそれを読むことで理解の助けとしました。

GPU とメモリ管理が絡んでくるため若干ハードウェアの事情を知る必要もあります。

戻る

Leave a Reply

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