Code/RetroPostProcessing.cs
using Sandbox;
using Sandbox.Rendering;
[Title( "Retro Post-Processing" ), Category( "Retro Shading Model" ), Icon( "camera" )]
public sealed class RetroPostProcessing : Component
{
private CommandList CommandList;
[Change( nameof( CreateCommandList ) ), Property] public bool Dither { get; set; } = true;
[Change( nameof( CreateCommandList ) ), Property] public bool Downscale { get; set; } = true;
[Change( nameof( CreateCommandList ) ), Property] public bool ColorCorrection { get; set; } = true;
[Change( nameof( CreateCommandList ) ), Property] public bool Crop { get; set; } = true;
[Change( nameof( CreateCommandList ) ), Property] public bool Noise { get; set; } = true;
protected override void OnEnabled()
{
CreateCommandList();
}
protected override void OnDisabled()
{
Scene.Camera?.RemoveCommandList( CommandList );
CommandList = null;
}
private void CreateCommandList()
{
if ( Scene.IsEditor )
return;
if ( !Scene.Camera.EnablePostProcessing )
return;
Scene.Camera?.RemoveCommandList( CommandList );
CommandList = new CommandList( "Overlay" );
CommandList.Attributes.GrabFrameTexture( "ColorBuffer" );
CommandList.Attributes.GrabDepthTexture();
CommandList.Attributes.Set( "Dither", Dither );
CommandList.Attributes.Set( "Downscale", Downscale );
CommandList.Attributes.Set( "ColorCorrection", ColorCorrection );
CommandList.Attributes.Set( "Crop", Crop );
CommandList.Attributes.Set( "Noise", Noise );
CommandList.Blit( Material.Load( "materials/rsm_postprocess.vmat" ) );
Scene.Camera.AddCommandList( CommandList, Stage.BeforePostProcess, 2000 );
}
}