using System;
using SharpVk.Khronos;
using SkiaSharp;
using Device = SharpVk.Device;
using Instance = SharpVk.Instance;
using PhysicalDevice = SharpVk.PhysicalDevice;
using Queue = SharpVk.Queue;

namespace Artemis.UI.SkiaSharp.Vulkan
{
    internal class VkContext : IDisposable
    {
        public virtual Instance Instance { get; protected set; }

        public virtual PhysicalDevice PhysicalDevice { get; protected set; }

        public virtual Surface Surface { get; protected set; }

        public virtual Device Device { get; protected set; }

        public virtual Queue GraphicsQueue { get; protected set; }

        public virtual Queue PresentQueue { get; protected set; }

        public virtual uint GraphicsFamily { get; protected set; }

        public virtual uint PresentFamily { get; protected set; }

        public virtual GRVkGetProcedureAddressDelegate GetProc { get; protected set; }

        public virtual GRSharpVkGetProcedureAddressDelegate SharpVkGetProc { get; protected set; }

        public virtual void Dispose() => Instance?.Dispose();
    }
}
