using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;

namespace CodeImp.DoomBuilder.Rendering
{
    public class IndexBuffer : IDisposable
    {
        public IndexBuffer()
        {
            Handle = IndexBuffer_New();
            if (Handle == IntPtr.Zero)
                throw new Exception("IndexBuffer_New failed");
        }

        ~IndexBuffer()
        {
            Dispose();
        }

        public bool Disposed { get { return Handle == IntPtr.Zero; } }

        public void Dispose()
        {
            if (!Disposed)
            {
                IndexBuffer_Delete(Handle);
                Handle = IntPtr.Zero;
            }
        }

        internal IntPtr Handle;

        [DllImport("BuilderNative", CallingConvention = CallingConvention.Cdecl)]
        static extern IntPtr IndexBuffer_New();

        [DllImport("BuilderNative", CallingConvention = CallingConvention.Cdecl)]
        static extern void IndexBuffer_Delete(IntPtr handle);
    }
}