aboutsummaryrefslogtreecommitdiffstatsci
path: root/vke/src/DescriptorSetLayout.cs
diff options
context:
space:
mode:
Diffstat (limited to 'vke/src/DescriptorSetLayout.cs')
-rw-r--r--vke/src/DescriptorSetLayout.cs51
1 files changed, 20 insertions, 31 deletions
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<VkDescriptorSetLayoutBinding> Bindings { get; private set; } = new List<VkDescriptorSetLayoutBinding> ();
- public NativeList<VkDescriptorSetLayoutBinding> Bindings = new NativeList<VkDescriptorSetLayoutBinding> ();
-
- 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
}