#pragma once
#include "../vulkan.h"

namespace vulkanapi {
	class DeviceCreator;
	class Queue;
	class Device{
		friend class DeviceCreator;
	protected:
		VkDevice mPtr{ NULL };
		VkPhysicalDevice mPhysical{NULL};
		map<const string*, Queue*> mQueueMap;
	public:
		VkDevice& Ptr() {
			return mPtr;
		}
		VkPhysicalDevice GetPhysical() {
			return mPhysical;
		}
	public:
		Device(DeviceCreator& Creator);
		~Device();

		Queue* GetQueue(const string& name);
		VkFence CreateFence();
		VkSemaphore CreateSemaphore();
		VkShaderModule CreateShaderModule(vector<char> code);
	};
};