Code/Postprocess.cs
using System;
using Sandbox;
using Sandbox.Utility;
[Icon("waves"), Category("Post Processing")]
public sealed class Postprocess : PostProcess, Component.ExecuteInEditor
{
[Property] public Shader PostprocessShader { get; set; }
IDisposable renderHook;
protected override void OnEnabled()
{
renderHook = Camera.AddHookBeforeOverlay( "My Post Processing", 1000, RenderEffect);
}
protected override void OnDisabled()
{
renderHook?.Dispose();
renderHook = null;
}
RenderAttributes attributes = new RenderAttributes();
public void RenderEffect(SceneCamera camera)
{
if (!camera.EnablePostProcessing) return;
Graphics.GrabFrameTexture("ColorBuffer", attributes);
Graphics.Blit(Material.FromShader(PostprocessShader), attributes);
}
}