フレームバッファ
FrameBufferを用いると、ノードをテクスチャにレンダリングできます。ミニマップ、リアルタイム反射、ポストエフェクト、動的テクスチャ生成など、高度なグラフィック表現に使用されます。
フレームバッファの作成
Section titled “フレームバッファの作成”public class GameScene : Scene{ public override void OnStart() { // 256x256のフレームバッファを作成 var frameBuffer = new FrameBuffer(256, 256);
// ノードを追加(これらはテクスチャにレンダリングされる) frameBuffer.Add(new Text("Hello, World!", Font.GetDefault(), Color.Black)); frameBuffer.Add(new Sprite(playerTexture).Location(50, 50));
// フレームバッファのテクスチャを画面に表示 var resultSprite = new Sprite(frameBuffer.Texture) .Location(100, 100);
Root.Add(resultSprite); }}背景色の設定
Section titled “背景色の設定”var frameBuffer = new FrameBuffer(256, 256);
// 背景色を設定frameBuffer.BackgroundColor = Color.White; // 白背景frameBuffer.BackgroundColor = Color.Black; // 黒背景frameBuffer.BackgroundColor = Color.Transparent; // 透明背景(デフォルト)自動レンダリングの制御
Section titled “自動レンダリングの制御”AutoRender を false にすると、毎フレームの自動レンダリングを停止できます。この場合、Render() を手動で呼び出すことで任意のタイミングでレンダリングできます。
var frameBuffer = new FrameBuffer(256, 256);
// 自動レンダリングを無効化(毎フレーム更新しない)frameBuffer.AutoRender = false;
// 手動でレンダリングを実行frameBuffer.Render();AutoClear を false にすると、レンダリング前のクリアを省略できます。前フレームの内容に追記する場合などに使用します。
// レンダリング前のクリアを無効化frameBuffer.AutoClear = false;バックエンドサポート
Section titled “バックエンドサポート”フレームバッファはすべてのバックエンドでサポートされているわけではありません。使用前にApp.IsFrameBufferSupportedで確認してください。
if (!App.IsFrameBufferSupported){ Console.WriteLine("このバックエンドはフレームバッファをサポートしていません"); return;}
var frameBuffer = new FrameBuffer(256, 256);フレームバッファはIDisposableを実装しています。不要になったらDispose()を呼んでリソースを解放してください。
public class GameScene : Scene{ private FrameBuffer _frameBuffer;
public override void OnStart() { _frameBuffer = new FrameBuffer(256, 256); }
public override void OnDestroy() { _frameBuffer?.Dispose(); }}