Add Device and Window abstraction

This commit is contained in:
Thraix
2023-03-04 23:02:42 +01:00
parent 1e7d08250e
commit c975ed2674
47 changed files with 854 additions and 614 deletions
+48
View File
@@ -0,0 +1,48 @@
#pragma once
#include "copium/core/QueueFamilies.h"
#include "copium/core/Vulkan.h"
#include "copium/util/Common.h"
#include <vulkan/vulkan.hpp>
namespace Copium
{
class Vulkan;
class Device
{
CP_DELETE_COPY_AND_MOVE_CTOR(Device);
private:
Vulkan& vulkan;
VkPhysicalDevice physicalDevice;
VkDevice device;
VkCommandPool commandPool;
// TODO: Move to SwapChain?
uint32_t graphicsQueueIndex;
uint32_t presentQueueIndex;
VkQueue graphicsQueue;
VkQueue presentQueue;
// TODO end
public:
Device(Vulkan& vulkan);
~Device();
VkQueue GetGraphicsQueue() const;
VkQueue GetPresentQueue() const;
VkCommandPool GetCommandPool() const;
VkPhysicalDevice GetPhysicalDevice() const;
operator VkDevice() const;
uint32_t FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties);
private:
void SelectPhysicalDevice();
void InitializeLogicalDevice();
void InitializeCommandPool();
bool IsPhysicalDeviceSuitable(VkPhysicalDevice device);
bool CheckDeviceExtensionSupport(VkPhysicalDevice device);
std::vector<const char*> GetRequiredDeviceExtensions();
};
}