From 04d94de392b6e5ca4f82acc233df7b3f97abca36 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Bruyère Date: Fri, 5 Apr 2019 14:13:20 +0200 Subject: Activable pattern wip --- vke/src/DescriptorSetLayout.cs | 51 +++++++++++++++++------------------------- 1 file changed, 20 insertions(+), 31 deletions(-) (limited to 'vke/src/DescriptorSetLayout.cs') diff --git a/vke/src/DescriptorSetLayout.cs b/vke/src/DescriptorSetLayout.cs index 4d58ad3..49f5403 100644 --- a/vke/src/DescriptorSetLayout.cs +++ b/vke/src/DescriptorSetLayout.cs @@ -24,19 +24,19 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; +using System.Collections.Generic; using Vulkan; using static Vulkan.VulkanNative; namespace VKE { - public class DescriptorSetLayout : IDisposable { + public sealed class DescriptorSetLayout : Activable { internal VkDescriptorSetLayout handle; - internal Device dev; + public VkDescriptorSetLayoutCreateFlags Flags { get; private set; } = VkDescriptorSetLayoutCreateFlags.None; + public List Bindings { get; private set; } = new List (); - public NativeList Bindings = new NativeList (); - - public DescriptorSetLayout (Device device, VkDescriptorSetLayoutCreateFlags flags) { - dev = device; + #region CTORS + public DescriptorSetLayout (Device device, VkDescriptorSetLayoutCreateFlags flags) : base (device) { Flags = flags; } public DescriptorSetLayout (Device device, params VkDescriptorSetLayoutBinding[] bindings) @@ -48,35 +48,24 @@ namespace VKE { Bindings.Add (b); Activate (); } - public void Activate () { - if (isDisposed) { - GC.ReRegisterForFinalize (this); - isDisposed = false; - } - VkDescriptorSetLayoutCreateInfo info = new VkDescriptorSetLayoutCreateInfo (Flags, Bindings.Count, Bindings.Data); - Utils.CheckResult (vkCreateDescriptorSetLayout (dev.VkDev, ref info, IntPtr.Zero, out handle)); - } - - #region IDisposable Support - private bool isDisposed = false; // Pour détecter les appels redondants + #endregion - protected virtual void Dispose (bool disposing) { - if (!isDisposed) { - if (disposing) { - Bindings.Dispose (); - } else - System.Diagnostics.Debug.WriteLine ("A descriptorSetLayout has not been disposed."); - vkDestroyDescriptorSetLayout (dev.VkDev, handle, IntPtr.Zero); - isDisposed = true; + public override void Activate () { + if (state != ActivableState.Activated) { + VkDescriptorSetLayoutCreateInfo info = new VkDescriptorSetLayoutCreateInfo (Flags, (uint)Bindings.Count, Bindings.Pin()); + Utils.CheckResult (vkCreateDescriptorSetLayout (dev.VkDev, ref info, IntPtr.Zero, out handle)); + Bindings.Unpin (); } + base.Activate (); } - ~DescriptorSetLayout() { - Dispose(false); - } - public void Dispose () { - Dispose (true); - GC.SuppressFinalize(this); + #region IDisposable Support + protected override void Dispose (bool disposing) { + if (!disposing) + System.Diagnostics.Debug.WriteLine ("VKE DescriptorSetLayout disposed by finalizer"); + if (state == ActivableState.Activated) + vkDestroyDescriptorSetLayout (dev.VkDev, handle, IntPtr.Zero); + base.Dispose (disposing); } #endregion } -- cgit v1.3.1-4-g156e