メインコンテンツまでスキップ
バージョン: 2.0.0-preview

C#スクリプト

C# スクリプトでカスタムフィルターエフェクトを定義します。スクリプトはレンダリングコンテキストにアクセスでき、任意のポストプロセスを実装できます。

ライブラリでの場所​

「ライブラリ」 → フィルターエフェクト → スクリプト → C#スクリプト

プロパティ​

スクリプト (Script)​

C# スクリプトのソース。

  • 型: string
  • 既定値:
    // Available variables:
    // Context - FilterEffectContext
    // Progress - 0.0 to 1.0
    // Duration - total duration in seconds
    // Time - current time in seconds

    // Example: Apply a blur effect
    // Context.Blur(new Size(10, 10));

    // Prefer built-in composition and declarative shaders when they express the required effect.
    // Low-level GLSL fallback (inside a Context.CustomEffect callback; requires C#):
    // using var shader = CreateGlslShader(fragmentSource, inputCount: 2);
    // CreateGlslShader reuses compiled programs within this effect; dispose each returned wrapper.
    // shader.Render(execution, new[] { source, mask }, outputBounds, pushConstants)
    // returns an owned EffectTarget without changing its inputs. Dispose intermediate targets;
    // return the final target from execution.ForEach. If IsEmpty, dispose it and keep the source.
    // Use the Render overload with a destination callback for size/scale-dependent constants.
    // GLSL sampler2D inputs use set=0, bindings 0..inputCount-1; constants use layout(push_constant).
    // Constants must match the GLSL layout and occupy a multiple of 4 bytes, at most 128 bytes.
  • アニメーション: 不可

使い方​

組み込みフィルターでは表現できない処理のエスケープハッチとして使います。

GLSLのカスタムパス​

Context.CustomEffect のコールバック内から CreateGlslShader(fragmentSource, inputCount: ...) を使用できます。複数の入力を持つシェーダーや、前のパスの結果を次のパスへ渡す処理に利用します。

コンパイル済みプログラムはエフェクト内で再利用されますが、返されたシェーダーのラッパーと中間の EffectTarget は破棄してください。Render は入力を変更・破棄せず、新しいターゲットを返します。出力はリニア色空間の乗算済みアルファRGBAです。サイズや作業密度に依存する定数には、出力先を受け取るコールバック形式のオーバーロードを使用します。

ソース​

src/Beutl.Engine/Graphics/FilterEffects/CSharpScriptEffect.cs