mirror of
https://github.com/Facepunch/sbox-public.git
synced 2025-12-23 22:48:07 -05:00
* Stop generating solutions via -test flag add -generatesolution * Add TestAppSystem remove Application.InitUnitTest Avoids some hacks and also makes sure our tests are as close to a real AppSystem as possible. * Add shutdown unit test shuts down an re-inits the engine * Properly dispose native resources hold by managed during shutdown Should fix a bunch of crashes * Fix filesystem and networking tests * StandaloneTest does proper Game Close * Make sure package tests clean up properly * Make sure menu scene and resources are released on shutdown * Report leaked scenes on shutdown * Ensure DestroyImmediate is not used on scenes * Fix unmounting in unit tests not clearing native refs * Force destroy native resource on ResourceLib Clear
77 lines
2.3 KiB
C#
77 lines
2.3 KiB
C#
using NativeEngine;
|
|
|
|
namespace Sandbox.Rendering;
|
|
|
|
internal class BloomLayer : RenderLayer
|
|
{
|
|
public BloomLayer()
|
|
{
|
|
Name = $"Bloom Layer";
|
|
LayerType = SceneLayerType.Opaque;
|
|
Flags |= LayerFlags.NeverRemove;
|
|
ShaderMode = "Forward";
|
|
|
|
ClearFlags = ClearFlags.Color;
|
|
Flags |= LayerFlags.NeedsPerViewLightingConstants;
|
|
|
|
Attributes.Set( "UseTiledRendering", false ); // We render at quarter res and with lighting and this fucks up the offsets of tiled rendering
|
|
|
|
ObjectFlagsRequired = SceneObjectFlags.EffectsBloomLayer;
|
|
ObjectFlagsExcluded = SceneObjectFlags.IsLight;
|
|
}
|
|
|
|
public void Setup( ISceneView view, RenderTarget renderTarget )
|
|
{
|
|
ColorAttachment = renderTarget.ToColorHandle( view );
|
|
DepthAttachment = renderTarget.ToDepthHandle( view );
|
|
}
|
|
}
|
|
|
|
internal class BloomDownsampleLayer : ProceduralRenderLayer
|
|
{
|
|
public RenderTarget RT { get; set; }
|
|
public BloomDownsampleLayer()
|
|
{
|
|
Name = "Bloom Layer Gaussian Blur";
|
|
Flags |= LayerFlags.NeverRemove;
|
|
}
|
|
|
|
// Bit wasteful if we are not rendering anything before, in the future these two layers would only be called if we are rendering something
|
|
internal override void OnRender()
|
|
{
|
|
// Fucked?
|
|
// Graphics.GenerateMipMaps( rt.ColorTarget, Graphics.DownsampleMethod.GaussianBlur );
|
|
NativeEngine.CSceneSystem.DownsampleTexture( Graphics.Context, RT.ColorTarget.native, (int)Graphics.DownsampleMethod.GaussianBlur );
|
|
}
|
|
}
|
|
internal class QuarterDepthDownsampleLayer : ProceduralRenderLayer
|
|
{
|
|
private Material DepthResolve;
|
|
private bool MSAAInput;
|
|
|
|
public QuarterDepthDownsampleLayer()
|
|
{
|
|
Name = "Quarter Depth Downsample";
|
|
Flags |= LayerFlags.NeverRemove | LayerFlags.DoesntModifyColorBuffers;
|
|
ClearFlags = ClearFlags.Depth | ClearFlags.Stencil;
|
|
LayerType = SceneLayerType.Opaque;
|
|
DepthResolve = Material.Create( "depthresolve", "shaders/depthresolve.shader" );
|
|
}
|
|
|
|
public void Setup( ISceneView view, RenderViewport viewport, SceneViewRenderTargetHandle rtDepth, bool msaaInput, RenderTarget rtOutDepth )
|
|
{
|
|
RenderTargetAttributes["SourceDepth"] = rtDepth;
|
|
MSAAInput = msaaInput;
|
|
|
|
ColorAttachment = rtOutDepth.ToColorHandle( view );
|
|
DepthAttachment = rtOutDepth.ToDepthHandle( view );
|
|
}
|
|
|
|
internal override void OnRender()
|
|
{
|
|
Graphics.Attributes.SetCombo( "D_MSAA", MSAAInput );
|
|
Graphics.Attributes.Set( "DownsampleFactor", 4 );
|
|
Graphics.Blit( DepthResolve );
|
|
}
|
|
}
|