mirror of
https://github.com/Facepunch/sbox-public.git
synced 2026-01-03 03:48:24 -05:00
This commit imports the C# engine code and game files, excluding C++ source code. [Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
72 lines
1.3 KiB
C#
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();
|
|
}
|
|
}
|