From 9af331260bf34cd2f7578e863367dec69b32fa68 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Bruyère Date: Mon, 1 Apr 2019 14:24:57 +0200 Subject: model --- vke/src/DescriptorSetLayout.cs | 48 ++++++++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 13 deletions(-) (limited to 'vke/src/DescriptorSetLayout.cs') diff --git a/vke/src/DescriptorSetLayout.cs b/vke/src/DescriptorSetLayout.cs index ce9d929..1ab0255 100644 --- a/vke/src/DescriptorSetLayout.cs +++ b/vke/src/DescriptorSetLayout.cs @@ -28,11 +28,11 @@ using Vulkan; using static Vulkan.VulkanNative; namespace VKE { - public class DescriptorSetLayout { + public class DescriptorSetLayout : IDisposable { internal VkDescriptorSetLayout handle; internal Device dev; - internal NativeList layoutBindings = new NativeList (); + public NativeList Bindings = new NativeList (); public DescriptorSetLayout (Device device) { dev = device; @@ -40,19 +40,41 @@ namespace VKE { public DescriptorSetLayout (Device device, params VkDescriptorSetLayoutBinding[] bindings) : this (device) { foreach (VkDescriptorSetLayoutBinding b in bindings) - layoutBindings.Add (b); + Bindings.Add (b); Activate (); } public void Activate () { - VkDescriptorSetLayoutCreateInfo info = VkDescriptorSetLayoutCreateInfo.New (); - unsafe { - info.bindingCount = layoutBindings.Count; - info.pBindings = (VkDescriptorSetLayoutBinding*)layoutBindings.Data.ToPointer (); - Utils.CheckResult (vkCreateDescriptorSetLayout (dev.VkDev, ref info, IntPtr.Zero, out handle)); - } - } - public void Destroy () { - vkDestroyDescriptorSetLayout (dev.VkDev, handle, IntPtr.Zero); + if (isDisposed) { + GC.ReRegisterForFinalize (this); + isDisposed = false; + } + VkDescriptorSetLayoutCreateInfo info = VkDescriptorSetLayoutCreateInfo.New (); + info.bindingCount = Bindings.Count; + info.pBindings = 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 + + 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; + } + } + + ~DescriptorSetLayout() { + Dispose(false); + } + public void Dispose () { + Dispose (true); + GC.SuppressFinalize(this); + } + #endregion + } } -- cgit v1.3.1-4-g156e