コンテンツにスキップ

カスタムノードのレンダリング

カスタムノードに描画処理を追加するには、Node クラスの Collect() メソッドをオーバーライドして、RenderCommandQueue にレンダリングコマンドを追加します。

Collect() メソッドは描画フェーズに呼び出されます。引数の queue にコマンドを追加することで描画を行います。

using System.Drawing;
using Promete.Graphics;
using Promete.Nodes;
using Promete.Graphics.Rendering;
using Promete.Graphics.Rendering.Commands;
public class MyNode(Texture2D texture) : Node
{
public override void Collect(RenderCommandQueue queue, RenderContext ctx)
{
queue.Enqueue(new DrawTextureCommand
{
Texture = texture,
ModelMatrix = ModelMatrix, // 親の変形込みの変換行列
TintColor = Color.White,
Width = texture.Size.X,
Height = texture.Size.Y,
Material = Material,
});
}
}
コマンド用途
DrawTextureCommandテクスチャ描画(自動バッチング対応)
DrawPrimitiveCommandプリミティブ図形(矩形・円・三角形)の描画
DrawPieTextureCommand扇形テクスチャの描画
BeginTrimCommand / EndTrimCommandシザーテスト(描画範囲の制限)
BeginStencilMaskCommand / EndMaskCommandステンシルマスク
BeginAlphaMaskCommand / EndMaskCommandアルファマスク

各コマンドのプロパティは レンダリングコマンドシステム を参照してください。

RenderContext は描画時のコンテキスト情報を保持します。

public override void Collect(RenderCommandQueue queue, RenderContext ctx)
{
// ウィンドウの論理サイズと、物理ピクセル単位のサイズを参照できる
var windowSize = ctx.WindowSize;
var actualSize = (ctx.ActualWidth, ctx.ActualHeight);
}
  • ModelMatrix は、位置・回転・スケール・ピボットに親ノードの変形を合成した変換行列です。描画コマンドにはこれを渡します
  • レンダリングはバックエンド固有の処理を直接書く必要はなく、コマンドをキューに追加するだけでエンジンが描画を行います