diff --git a/GlitchyEngine/src/Renderer/GeometryBinding.bf b/GlitchyEngine/src/Renderer/GeometryBinding.bf index 0d70a8f..f2be3ed 100644 --- a/GlitchyEngine/src/Renderer/GeometryBinding.bf +++ b/GlitchyEngine/src/Renderer/GeometryBinding.bf @@ -3,7 +3,7 @@ using System.Collections; namespace GlitchyEngine.Renderer { - public class GeometryBinding + public class GeometryBinding : RefCounted { internal GraphicsContext _context ~ _?.ReleaseRef(); @@ -19,6 +19,16 @@ namespace GlitchyEngine.Renderer _context = context..AddRef(); } + public ~this() + { + for(let binding in _vertexBuffers) + { + binding.Buffer?.ReleaseRef(); + } + + _indexBuffer?.ReleaseRef(); + } + public VertexBufferBinding GetVertexBuffer(uint32 slot) { return _vertexBuffers[slot]; @@ -46,6 +56,7 @@ namespace GlitchyEngine.Renderer public void SetVertexBufferSlot(VertexBufferBinding vertexBufferBinding, uint32 slot) { _vertexBuffers.Add(vertexBufferBinding); + vertexBufferBinding.Buffer.AddRef(); PlatformSetVertexBuffer(vertexBufferBinding, slot); } @@ -70,7 +81,10 @@ namespace GlitchyEngine.Renderer public void SetIndexBuffer(IndexBuffer indexBuffer, uint32 byteOffset = 0, uint32 indexCount = (.)-1) { + _indexBuffer?.ReleaseRef(); _indexBuffer = indexBuffer; + _indexBuffer.AddRef(); + _indexByteOffset = byteOffset; if(indexCount == (.)-1) diff --git a/Sandbox/src/SandboxApp.bf b/Sandbox/src/SandboxApp.bf index 046c4d5..1d8fe03 100644 --- a/Sandbox/src/SandboxApp.bf +++ b/Sandbox/src/SandboxApp.bf @@ -53,13 +53,9 @@ namespace Sandbox VertexLayout _vertexLayout ~ delete _; - GeometryBinding _geometryBinding ~ delete _; - VertexBuffer _vertexBuffer ~ _?.ReleaseRef(); - IndexBuffer _indexBuffer ~ _?.ReleaseRef(); + GeometryBinding _geometryBinding ~ _?.ReleaseRef(); - GeometryBinding _quadGeometryBinding ~ delete _; - VertexBuffer _quadVertexBuffer ~ _?.ReleaseRef(); - IndexBuffer _quadIndexBuffer ~ _?.ReleaseRef(); + GeometryBinding _quadGeometryBinding ~ _?.ReleaseRef(); RasterizerState _rasterizerState ~ delete _; @@ -109,9 +105,10 @@ namespace Sandbox VertexColorTexture(CircleCoord(-pO3), Color(255, 0,255)), ); - _vertexBuffer = new VertexBuffer(_context, typeof(VertexColorTexture), (.)vertices.Count, .Immutable); - _vertexBuffer.SetData(vertices); - _geometryBinding.SetVertexBufferSlot(_vertexBuffer, 0); + let vb = new VertexBuffer(_context, typeof(VertexColorTexture), (.)vertices.Count, .Immutable); + vb.SetData(vertices); + _geometryBinding.SetVertexBufferSlot(vb, 0); + vb.ReleaseRef(); uint16[?] indices = .( 0, 1, 2, @@ -121,9 +118,10 @@ namespace Sandbox 0, 5, 6, 0, 6, 1); - _indexBuffer = new IndexBuffer(_context, (.)indices.Count, .Immutable); - _indexBuffer.SetData(indices); - _geometryBinding.SetIndexBuffer(_indexBuffer); + let ib = new IndexBuffer(_context, (.)indices.Count, .Immutable); + ib.SetData(indices); + _geometryBinding.SetIndexBuffer(ib); + ib.ReleaseRef(); } // Create Quad @@ -139,17 +137,19 @@ namespace Sandbox VertexColorTexture(Vector3(0.75f, 0.75f, 0), Color.White, .(1, 0)), ); - _quadVertexBuffer = new VertexBuffer(_context, typeof(VertexColorTexture), (.)vertices.Count, .Immutable); - _quadVertexBuffer.SetData(vertices); - _quadGeometryBinding.SetVertexBufferSlot(_quadVertexBuffer, 0); + let qvb = new VertexBuffer(_context, typeof(VertexColorTexture), (.)vertices.Count, .Immutable); + qvb.SetData(vertices); + _quadGeometryBinding.SetVertexBufferSlot(qvb, 0); + qvb.ReleaseRef(); uint16[?] indices = .( 0, 1, 2, 2, 3, 0); - _quadIndexBuffer = new IndexBuffer(_context, (.)indices.Count, .Immutable); - _quadIndexBuffer.SetData(indices); - _quadGeometryBinding.SetIndexBuffer(_quadIndexBuffer); + let qib = new IndexBuffer(_context, (.)indices.Count, .Immutable); + qib.SetData(indices); + _quadGeometryBinding.SetIndexBuffer(qib); + qib.ReleaseRef(); } // Create rasterizer state