コンテンツにスキップ

フレームバッファ

FrameBufferを用いると、ノードをテクスチャにレンダリングできます。ミニマップ、リアルタイム反射、ポストエフェクト、動的テクスチャ生成など、高度なグラフィック表現に使用されます。

基本的なフレームバッファの作成
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);
}
}
var frameBuffer = new FrameBuffer(256, 256);
// 背景色を設定
frameBuffer.BackgroundColor = Color.White; // 白背景
frameBuffer.BackgroundColor = Color.Black; // 黒背景
frameBuffer.BackgroundColor = Color.Transparent; // 透明背景(デフォルト)

AutoRender を false にすると、毎フレームの自動レンダリングを停止できます。この場合、Render() を手動で呼び出すことで任意のタイミングでレンダリングできます。

var frameBuffer = new FrameBuffer(256, 256);
// 自動レンダリングを無効化(毎フレーム更新しない)
frameBuffer.AutoRender = false;
// 手動でレンダリングを実行
frameBuffer.Render();

AutoClear を false にすると、レンダリング前のクリアを省略できます。前フレームの内容に追記する場合などに使用します。

// レンダリング前のクリアを無効化
frameBuffer.AutoClear = false;

フレームバッファはすべてのバックエンドでサポートされているわけではありません。使用前に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();
}
}