Вынес работу с VpPhysicalDevice в отдельный класс

This commit is contained in:
Jiga228
2026-06-23 18:35:48 +07:00
parent 70956e2032
commit 3cbe642fca
6 changed files with 233 additions and 193 deletions
@@ -0,0 +1,41 @@
#pragma once
#include <vulkan/vulkan_core.h>
#include <vector>
namespace VkObjects
{
class Surface;
class Instance;
class PhysicalDevice
{
public:
struct QueueFamilyIndices
{
uint32_t graphics_family = 0;
uint32_t present_family = 0;
uint32_t transfer_family = 0;
bool is_find_graphics_family = false;
bool is_find_present_family = false;
bool is_find_transfer_family = false;
};
QueueFamilyIndices queue_family_indices_{};
private:
VkPhysicalDevice physical_device_ = nullptr;
// Выбрасывает исключение если не подходит
static QueueFamilyIndices is_device_suitable(VkPhysicalDevice device, VkSurfaceKHR surface, const std::vector<const char*>& device_extensions);
static bool check_device_extensions_support(VkPhysicalDevice device, const std::vector<const char*>& device_extensions);
static QueueFamilyIndices find_queue_family_indices(VkPhysicalDevice physical_device,
VkSurfaceKHR surface);
public:
PhysicalDevice(const Instance& instance, const Surface& surface, const std::vector<const char*>& device_extensions);
inline VkPhysicalDevice get_native() const { return physical_device_; }
inline QueueFamilyIndices get_queue_family_indices() const { return queue_family_indices_; }
std::vector<uint32_t> get_unique_family_indices() const;
};
}