aboutsummaryrefslogtreecommitdiffstatsci
path: root/vke/src/DescriptorSetLayout.cs
diff options
context:
space:
mode:
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>2019-04-01 14:24:57 +0200
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>2019-04-01 14:24:57 +0200
commit9af331260bf34cd2f7578e863367dec69b32fa68 (patch)
tree47b91a2e1a71bcc8e86847faeacb35bff53bad19 /vke/src/DescriptorSetLayout.cs
parente4ff67fb5f3a492809dcac8b09b8b4b0ba288044 (diff)
model
Diffstat (limited to 'vke/src/DescriptorSetLayout.cs')
-rw-r--r--vke/src/DescriptorSetLayout.cs48
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
+ }
}