Files
sbox-public/engine/Sandbox.Engine/Scene/Components/PostProcessing/PostProcessLayers.cs
s&box team 71f266059a Open source release
This commit imports the C# engine code and game files, excluding C++ source code.

[Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
2025-11-24 09:05:18 +00:00

72 lines
1.3 KiB
C#

using Sandbox.Rendering;
namespace Sandbox;
/// <summary>
/// Holds a list of post processing layers for a camera
/// </summary>
internal class PostProcessLayers
{
public Dictionary<Stage, List<PostProcessLayer>> Layers = new();
public void Clear()
{
Layers.Clear();
}
/// <summary>
/// Add a new post process layer to a specific stage
/// </summary>
public PostProcessLayer CreateLayer( Stage stage )
{
PostProcessLayer layer = new();
if ( !Layers.TryGetValue( stage, out var list ) )
{
list = [];
Layers[stage] = list;
}
list.Add( layer );
return layer;
}
/// <summary>
/// Called for each stage during this camera's render. This is called on the render thread.
/// </summary>
public void OnRenderStage( Stage stage )
{
if ( !Layers.TryGetValue( stage, out var list ) )
return;
foreach ( var entry in list.OrderBy( x => x.Order ) )
{
entry.Render();
}
}
}
internal record struct WeightedEffect
{
public BasePostProcess Effect;
public float Weight;
}
/// <summary>
/// A layer is placed on a specific Render Stage is ordered relative to other layers on that stage
/// </summary>
internal class PostProcessLayer
{
public CommandList CommandList;
public int Order;
public string Name;
/// <summary>
/// Render this layer
/// </summary>
public void Render()
{
CommandList.ExecuteOnRenderThread();
}
}