diff options
| author | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2019-04-01 14:24:57 +0200 |
|---|---|---|
| committer | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2019-04-01 14:24:57 +0200 |
| commit | 9af331260bf34cd2f7578e863367dec69b32fa68 (patch) | |
| tree | 47b91a2e1a71bcc8e86847faeacb35bff53bad19 /vke/src/DescriptorSetLayout.cs | |
| parent | e4ff67fb5f3a492809dcac8b09b8b4b0ba288044 (diff) | |
model
Diffstat (limited to 'vke/src/DescriptorSetLayout.cs')
| -rw-r--r-- | vke/src/DescriptorSetLayout.cs | 48 |
1 files changed, 35 insertions, 13 deletions
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<VkDescriptorSetLayoutBinding> layoutBindings = new NativeList<VkDescriptorSetLayoutBinding> (); + public NativeList<VkDescriptorSetLayoutBinding> Bindings = new NativeList<VkDescriptorSetLayoutBinding> (); 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 + } } |