From 84daee95e46baeb37eae56451cb21150921db7fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Wed, 13 Oct 2021 09:52:12 +0200 Subject: [PATCH] Replaced RefCounted with RefCounter --- GlitchyEngine/src/Core/RefCounter.bf | 17 +++++++++++++++++ GlitchyEngine/src/Helper.bf | 9 +++++---- .../src/Renderer/Animation/AnimationClip.bf | 5 +++-- .../src/Renderer/Animation/Skeleton.bf | 4 ++-- GlitchyEngine/src/Renderer/BlendState.bf | 4 +++- GlitchyEngine/src/Renderer/Buffer.bf | 3 ++- .../src/Renderer/DepthStencilTarget.bf | 5 +++-- GlitchyEngine/src/Renderer/Effect.bf | 3 ++- GlitchyEngine/src/Renderer/GeometryBinding.bf | 3 ++- GlitchyEngine/src/Renderer/GraphicsContext.bf | 5 +++-- GlitchyEngine/src/Renderer/Material.bf | 3 ++- GlitchyEngine/src/Renderer/RasterizerState.bf | 4 +++- GlitchyEngine/src/Renderer/RenderTarget.bf | 5 +++-- GlitchyEngine/src/Renderer/SamplerState.bf | 3 ++- GlitchyEngine/src/Renderer/Shader.bf | 3 ++- GlitchyEngine/src/Renderer/Text/Font.bf | 3 ++- GlitchyEngine/src/Renderer/Texture.bf | 3 ++- GlitchyEngine/src/Renderer/VertexLayout.bf | 3 ++- 18 files changed, 60 insertions(+), 25 deletions(-) create mode 100644 GlitchyEngine/src/Core/RefCounter.bf diff --git a/GlitchyEngine/src/Core/RefCounter.bf b/GlitchyEngine/src/Core/RefCounter.bf new file mode 100644 index 0000000..0d24eef --- /dev/null +++ b/GlitchyEngine/src/Core/RefCounter.bf @@ -0,0 +1,17 @@ +using System; + +namespace GlitchyEngine.Core +{ + /** + * Provides a reference counter that, when reaching 0, automatically deletes itself. + * Implements the IDisposable interface so that it can be used with a using-Block so that the counter + * will be decremented automatically after leaving the block. + */ + public class RefCounter : System.RefCounted, IDisposable + { + public void Dispose() + { + ReleaseRef(); + } + } +} diff --git a/GlitchyEngine/src/Helper.bf b/GlitchyEngine/src/Helper.bf index 6e70ced..d69ec74 100644 --- a/GlitchyEngine/src/Helper.bf +++ b/GlitchyEngine/src/Helper.bf @@ -1,20 +1,21 @@ -using System; using DirectX.Common; +using GlitchyEngine.Core; namespace GlitchyEngine { static { /// Releases the reference to destination, writes newValue into it and adds a reference to newValue. - public static mixin SetReference(T destination, T newValue) where T: RefCounted + public static mixin SetReference(T destination, T newValue) where T: RefCounter { - destination?.ReleaseRef(); + var oldDest = destination; destination = newValue; destination?.AddRef(); + oldDest?.ReleaseRef(); } /// Releases the reference to value and nullifies it. - public static mixin ReleaseRefAndNullify(T value) where T: RefCounted + public static mixin ReleaseRefAndNullify(T value) where T: RefCounter { value?.ReleaseRef(); value = null; diff --git a/GlitchyEngine/src/Renderer/Animation/AnimationClip.bf b/GlitchyEngine/src/Renderer/Animation/AnimationClip.bf index 1ead3af..4fc6460 100644 --- a/GlitchyEngine/src/Renderer/Animation/AnimationClip.bf +++ b/GlitchyEngine/src/Renderer/Animation/AnimationClip.bf @@ -1,5 +1,6 @@ -using GlitchyEngine.Math; using System; +using GlitchyEngine.Core; +using GlitchyEngine.Math; namespace GlitchyEngine.Renderer.Animation { @@ -64,7 +65,7 @@ namespace GlitchyEngine.Renderer.Animation } } - class AnimationClip : RefCounted + class AnimationClip : RefCounter { private Skeleton _skeleton ~ _.ReleaseRef(); //public float FramesPerSecond; diff --git a/GlitchyEngine/src/Renderer/Animation/Skeleton.bf b/GlitchyEngine/src/Renderer/Animation/Skeleton.bf index a2e189d..637157a 100644 --- a/GlitchyEngine/src/Renderer/Animation/Skeleton.bf +++ b/GlitchyEngine/src/Renderer/Animation/Skeleton.bf @@ -1,9 +1,9 @@ -using System; +using GlitchyEngine.Core; using GlitchyEngine.Math; namespace GlitchyEngine.Renderer.Animation { - public class Skeleton : RefCounted + public class Skeleton : RefCounter { public Joint[] Joints ~ delete _; diff --git a/GlitchyEngine/src/Renderer/BlendState.bf b/GlitchyEngine/src/Renderer/BlendState.bf index 6bda64d..ba1174f 100644 --- a/GlitchyEngine/src/Renderer/BlendState.bf +++ b/GlitchyEngine/src/Renderer/BlendState.bf @@ -1,5 +1,7 @@ using System; +using GlitchyEngine.Core; using GlitchyEngine.Math; + namespace GlitchyEngine.Renderer { public struct BlendStateDescription @@ -70,7 +72,7 @@ namespace GlitchyEngine.Renderer public static readonly Self Default = .(false, false, .(.Default, .Default, .Default, .Default, .Default, .Default, .Default, .Default)); } - public class BlendState : RefCounted + public class BlendState : RefCounter { protected GraphicsContext _context ~ _?.ReleaseRef(); diff --git a/GlitchyEngine/src/Renderer/Buffer.bf b/GlitchyEngine/src/Renderer/Buffer.bf index d503051..7fb0799 100644 --- a/GlitchyEngine/src/Renderer/Buffer.bf +++ b/GlitchyEngine/src/Renderer/Buffer.bf @@ -1,4 +1,5 @@ using System; +using GlitchyEngine.Core; namespace GlitchyEngine.Renderer { @@ -80,7 +81,7 @@ namespace GlitchyEngine.Renderer } /// Represents a buffer containing binary data on the GPU. - public class Buffer : RefCounted + public class Buffer : RefCounter { internal GraphicsContext _context ~ _?.ReleaseRef(); diff --git a/GlitchyEngine/src/Renderer/DepthStencilTarget.bf b/GlitchyEngine/src/Renderer/DepthStencilTarget.bf index eb49f01..cb27d3d 100644 --- a/GlitchyEngine/src/Renderer/DepthStencilTarget.bf +++ b/GlitchyEngine/src/Renderer/DepthStencilTarget.bf @@ -1,4 +1,5 @@ -using System; +using GlitchyEngine.Core; + namespace GlitchyEngine.Renderer { public enum DepthStencilFormat @@ -11,7 +12,7 @@ namespace GlitchyEngine.Renderer } // TODO: add all features. - public class DepthStencilTarget : RefCounted + public class DepthStencilTarget : RefCounter { protected internal GraphicsContext _context ~ _?.ReleaseRef(); diff --git a/GlitchyEngine/src/Renderer/Effect.bf b/GlitchyEngine/src/Renderer/Effect.bf index 4356d18..2d6f5b6 100644 --- a/GlitchyEngine/src/Renderer/Effect.bf +++ b/GlitchyEngine/src/Renderer/Effect.bf @@ -1,6 +1,7 @@ using System; using System.IO; using System.Collections; +using GlitchyEngine.Core; namespace GlitchyEngine.Renderer { @@ -89,7 +90,7 @@ namespace GlitchyEngine.Renderer public bool Exists(String effectName) => _effects.ContainsKey(effectName); } - public class Effect : RefCounted + public class Effect : RefCounter { protected GraphicsContext _context ~ _?.ReleaseRef(); internal VertexShader _vs ~ _?.ReleaseRef(); diff --git a/GlitchyEngine/src/Renderer/GeometryBinding.bf b/GlitchyEngine/src/Renderer/GeometryBinding.bf index edf1105..16fc5d0 100644 --- a/GlitchyEngine/src/Renderer/GeometryBinding.bf +++ b/GlitchyEngine/src/Renderer/GeometryBinding.bf @@ -1,9 +1,10 @@ using System; using System.Collections; +using GlitchyEngine.Core; namespace GlitchyEngine.Renderer { - public class GeometryBinding : RefCounted + public class GeometryBinding : RefCounter { internal GraphicsContext _context ~ _?.ReleaseRef(); diff --git a/GlitchyEngine/src/Renderer/GraphicsContext.bf b/GlitchyEngine/src/Renderer/GraphicsContext.bf index 110b7c9..f77987b 100644 --- a/GlitchyEngine/src/Renderer/GraphicsContext.bf +++ b/GlitchyEngine/src/Renderer/GraphicsContext.bf @@ -1,9 +1,10 @@ -using GlitchyEngine.Math; using System; +using GlitchyEngine.Core; +using GlitchyEngine.Math; namespace GlitchyEngine.Renderer { - public class GraphicsContext : RefCounted + public class GraphicsContext : RefCounter { private RasterizerState _currentRasterizerState; diff --git a/GlitchyEngine/src/Renderer/Material.bf b/GlitchyEngine/src/Renderer/Material.bf index e13fa96..01e3ff7 100644 --- a/GlitchyEngine/src/Renderer/Material.bf +++ b/GlitchyEngine/src/Renderer/Material.bf @@ -1,12 +1,13 @@ using System; using System.Collections; +using GlitchyEngine.Core; using GlitchyEngine.Math; using internal GlitchyEngine.Renderer; namespace GlitchyEngine.Renderer { - public class Material : RefCounted + public class Material : RefCounter { private Effect _effect ~ _?.ReleaseRef(); diff --git a/GlitchyEngine/src/Renderer/RasterizerState.bf b/GlitchyEngine/src/Renderer/RasterizerState.bf index 36504f3..abcb0b7 100644 --- a/GlitchyEngine/src/Renderer/RasterizerState.bf +++ b/GlitchyEngine/src/Renderer/RasterizerState.bf @@ -1,4 +1,6 @@ using System; +using GlitchyEngine.Core; + namespace GlitchyEngine.Renderer { public enum FillMode @@ -50,7 +52,7 @@ namespace GlitchyEngine.Renderer public static readonly RasterizerStateDescription Default = .(.Solid, .Back, false, 0, 0f, 0f, true, false, false, false); } - public class RasterizerState : RefCounted + public class RasterizerState : RefCounter { internal GraphicsContext _context ~ _?.ReleaseRef(); private RasterizerStateDescription _description; diff --git a/GlitchyEngine/src/Renderer/RenderTarget.bf b/GlitchyEngine/src/Renderer/RenderTarget.bf index c4af0e6..80c374d 100644 --- a/GlitchyEngine/src/Renderer/RenderTarget.bf +++ b/GlitchyEngine/src/Renderer/RenderTarget.bf @@ -1,4 +1,5 @@ -using System; +using GlitchyEngine.Core; + namespace GlitchyEngine.Renderer { public struct RenderTarget2DDescription @@ -32,7 +33,7 @@ namespace GlitchyEngine.Renderer } } - public class RenderTarget2D : RefCounted + public class RenderTarget2D : RefCounter { internal GraphicsContext _context; diff --git a/GlitchyEngine/src/Renderer/SamplerState.bf b/GlitchyEngine/src/Renderer/SamplerState.bf index b731de5..1117292 100644 --- a/GlitchyEngine/src/Renderer/SamplerState.bf +++ b/GlitchyEngine/src/Renderer/SamplerState.bf @@ -1,4 +1,5 @@ using System; +using GlitchyEngine.Core; using GlitchyEngine.Math; using System.Collections; @@ -285,7 +286,7 @@ namespace GlitchyEngine.Renderer } } - public class SamplerState : RefCounted + public class SamplerState : RefCounter { protected GraphicsContext _context ~ _?.ReleaseRef(); diff --git a/GlitchyEngine/src/Renderer/Shader.bf b/GlitchyEngine/src/Renderer/Shader.bf index bd66024..6c24338 100644 --- a/GlitchyEngine/src/Renderer/Shader.bf +++ b/GlitchyEngine/src/Renderer/Shader.bf @@ -1,6 +1,7 @@ using System; using System.IO; using System.Collections; +using GlitchyEngine.Core; namespace GlitchyEngine.Renderer { @@ -18,7 +19,7 @@ namespace GlitchyEngine.Renderer } } - public abstract class Shader : RefCounted + public abstract class Shader : RefCounter { protected GraphicsContext _context ~ _?.ReleaseRef(); diff --git a/GlitchyEngine/src/Renderer/Text/Font.bf b/GlitchyEngine/src/Renderer/Text/Font.bf index dcc72ac..2cb90d3 100644 --- a/GlitchyEngine/src/Renderer/Text/Font.bf +++ b/GlitchyEngine/src/Renderer/Text/Font.bf @@ -1,6 +1,7 @@ using System; using FreeType; using GlitchyEngine.Math; +using GlitchyEngine.Core; using System.Collections; using msdfgen; @@ -8,7 +9,7 @@ using internal GlitchyEngine.Renderer.Text; namespace GlitchyEngine.Renderer.Text { - public class Font : RefCounted + public class Font : RefCounter { internal class GlyphDescriptor { diff --git a/GlitchyEngine/src/Renderer/Texture.bf b/GlitchyEngine/src/Renderer/Texture.bf index 3df0afb..cd667d1 100644 --- a/GlitchyEngine/src/Renderer/Texture.bf +++ b/GlitchyEngine/src/Renderer/Texture.bf @@ -1,9 +1,10 @@ using System; +using GlitchyEngine.Core; using GlitchyEngine.Math; namespace GlitchyEngine.Renderer { - public abstract class Texture : RefCounted + public abstract class Texture : RefCounter { protected GraphicsContext _context ~ _?.ReleaseRef(); diff --git a/GlitchyEngine/src/Renderer/VertexLayout.bf b/GlitchyEngine/src/Renderer/VertexLayout.bf index cdf38f7..f3870f2 100644 --- a/GlitchyEngine/src/Renderer/VertexLayout.bf +++ b/GlitchyEngine/src/Renderer/VertexLayout.bf @@ -1,4 +1,5 @@ using System; +using GlitchyEngine.Core; namespace GlitchyEngine.Renderer { @@ -78,7 +79,7 @@ namespace GlitchyEngine.Renderer public static readonly uint32 AppendAligned = 0xffffffff; } - public class VertexLayout : RefCounted + public class VertexLayout : RefCounter { private GraphicsContext _context ~ _?.ReleaseRef();