11using System . Numerics ;
2+ using Content . Client . Graphics ;
23using Content . Client . Light ;
34using Content . Shared . _ES . Power . Antimatter . Components ;
45using Content . Shared . CCVar ;
@@ -24,8 +25,7 @@ public sealed class ESAntimatterOverlay : Overlay
2425
2526 public override OverlaySpace Space => OverlaySpace . WorldSpace ;
2627
27- private IRenderTexture ? _renderTarget ;
28- private IRenderTexture ? _blurBuffer ;
28+ private readonly OverlayResourceCache < CachedResources > _resources = new ( ) ;
2929
3030 public ESAntimatterOverlay ( )
3131 {
@@ -47,24 +47,26 @@ protected override void Draw(in OverlayDrawArgs args)
4747
4848 var reducedMotion = _cfgManager . GetCVar ( CCVars . ReducedMotion ) ;
4949
50- if ( _renderTarget ? . Texture . Size != target . Size )
50+ var res = _resources . GetForViewport ( viewport , static _ => new CachedResources ( ) ) ;
51+
52+ if ( res . RenderTarget ? . Texture . Size != target . Size )
5153 {
52- _renderTarget ? . Dispose ( ) ;
53- _renderTarget = _clyde . CreateRenderTarget ( target . Size , new RenderTargetFormatParameters ( RenderTargetColorFormat . Rgba8Srgb ) , name : "ambient-occlusion-target" ) ;
54+ res . RenderTarget ? . Dispose ( ) ;
55+ res . RenderTarget = _clyde . CreateRenderTarget ( target . Size , new RenderTargetFormatParameters ( RenderTargetColorFormat . Rgba8Srgb ) , name : "ambient-occlusion-target" ) ;
5456 }
5557
56- if ( _blurBuffer ? . Texture . Size != target . Size )
58+ if ( res . BlurBuffer ? . Texture . Size != target . Size )
5759 {
58- _blurBuffer ? . Dispose ( ) ;
59- _blurBuffer = _clyde . CreateRenderTarget ( target . Size , new RenderTargetFormatParameters ( RenderTargetColorFormat . Rgba8Srgb ) , name : "ambient-occlusion-blur-target" ) ;
60+ res . BlurBuffer ? . Dispose ( ) ;
61+ res . BlurBuffer = _clyde . CreateRenderTarget ( target . Size , new RenderTargetFormatParameters ( RenderTargetColorFormat . Rgba8Srgb ) , name : "ambient-occlusion-blur-target" ) ;
6062 }
6163
6264 // Draw the texture data to the texture.
63- args . WorldHandle . RenderInRenderTarget ( _renderTarget ,
65+ args . WorldHandle . RenderInRenderTarget ( res . RenderTarget ,
6466 ( ) =>
6567 {
6668 worldHandle . UseShader ( _proto . Index ( UnshadedShader ) . Instance ( ) ) ;
67- var invMatrix = _renderTarget . GetWorldToLocalMatrix ( viewport . Eye ! , scale ) ;
69+ var invMatrix = res . RenderTarget . GetWorldToLocalMatrix ( viewport . Eye ! , scale ) ;
6870
6971 _antimatterSet . Clear ( ) ;
7072 lookups . GetEntitiesIntersecting ( mapId , worldBounds . Enlarged ( 2 ) , _antimatterSet ) ;
@@ -93,11 +95,23 @@ protected override void Draw(in OverlayDrawArgs args)
9395 var offset = ! reducedMotion
9496 ? _random . NextFloat ( - 2 , 2 )
9597 : 0 ;
96- _clyde . BlurRenderTarget ( viewport , _renderTarget , _blurBuffer , viewport . Eye ! , 14f * 2 + offset ) ;
98+ _clyde . BlurRenderTarget ( viewport , res . RenderTarget , res . BlurBuffer , viewport . Eye ! , 14f * 2 + offset ) ;
9799
98- worldHandle . DrawTextureRect ( _renderTarget ! . Texture , worldBounds , Color . Black ) ;
100+ worldHandle . DrawTextureRect ( res . RenderTarget ! . Texture , worldBounds , Color . Black ) ;
99101
100102 args . WorldHandle . SetTransform ( Matrix3x2 . Identity ) ;
101103 args . WorldHandle . UseShader ( null ) ;
102104 }
105+
106+ private sealed class CachedResources : IDisposable
107+ {
108+ public IRenderTexture ? RenderTarget = null ;
109+ public IRenderTexture ? BlurBuffer = null ;
110+
111+ public void Dispose ( )
112+ {
113+ RenderTarget ? . Dispose ( ) ;
114+ BlurBuffer ? . Dispose ( ) ;
115+ }
116+ }
103117}
0 commit comments