Skip to content
Snippets Groups Projects
Context.hpp 1.41 KiB
#pragma once
#include <vulkan/vulkan.hpp>

namespace vkcv {

	class Context final {
	private:
		vk::Instance m_instance;
		vk::PhysicalDevice m_physicalDevice;
		vk::Device m_device;

		Context(vk::Instance instance, vk::PhysicalDevice physicalDevice, vk::Device device);


	public:
		Context(const Context &other) = delete;
		Context(Context &&other) = default;

		[[nodiscard]]
		const vk::Instance& getInstance() const;
		
		[[nodiscard]]
		const vk::PhysicalDevice& getPhysicalDevice() const;
		
		[[nodiscard]]
		const vk::Device& getDevice() const;

		virtual ~Context();

		Context& operator=(const Context &other) = delete;
		Context& operator=(Context &&other) = default;

		static Context create(const char* applicationName, uint32_t applicationVersion, uint32_t queueCount = 1, std::vector<vk::QueueFlagBits> queueFlags = {}, std::vector<const char*> instanceExtensions = {}, std::vector<const char*> deviceExtensions = {});
		static bool checkSupport(std::vector<const char*> &supported, std::vector<const char*> &check);
		static std::vector<const char*> getRequiredExtensions();
		static vk::PhysicalDevice pickPhysicalDevice(vk::Instance& instance);
		static int deviceScore(const vk::PhysicalDevice &physicalDevice);
		static std::vector<vk::DeviceQueueCreateInfo> getQueueCreateInfos(vk::PhysicalDevice& physicalDevice, uint32_t queueCount, std::vector<float>& qPriorities, std::vector<vk::QueueFlagBits> &queueFlags);
	};

}