diff --git a/src/services/impl/vulkan_device_service.cpp b/src/services/impl/vulkan_device_service.cpp index 492f0a4..8aa4e0a 100644 --- a/src/services/impl/vulkan_device_service.cpp +++ b/src/services/impl/vulkan_device_service.cpp @@ -14,9 +14,8 @@ VulkanDeviceService::~VulkanDeviceService() { } } -void VulkanDeviceService::Initialize(SDL_Window* window, - const std::vector& deviceExtensions, - bool enableValidationLayers) { +void VulkanDeviceService::Initialize(const std::vector& deviceExtensions, + bool enableValidationLayers) { logging::TraceGuard trace; deviceExtensions_ = deviceExtensions; @@ -32,10 +31,19 @@ void VulkanDeviceService::Initialize(SDL_Window* window, std::vector requiredExtensions(extensions, extensions + extensionCount); CreateInstance(requiredExtensions); - CreateSurface(window); PickPhysicalDevice(); } +void VulkanDeviceService::CreateSurface(SDL_Window* window) { + logging::TraceGuard trace; + + if (!window) { + throw std::invalid_argument("Window cannot be null"); + } + + CreateSurfaceInternal(window); +} + void VulkanDeviceService::CreateInstance(const std::vector& requiredExtensions) { logging::TraceGuard trace; diff --git a/src/services/impl/vulkan_device_service.hpp b/src/services/impl/vulkan_device_service.hpp index 48c96c4..5761f7b 100644 --- a/src/services/impl/vulkan_device_service.hpp +++ b/src/services/impl/vulkan_device_service.hpp @@ -20,9 +20,9 @@ public: ~VulkanDeviceService() override; // IVulkanDeviceService interface - void Initialize(SDL_Window* window, - const std::vector& deviceExtensions, - bool enableValidationLayers) override; + void Initialize(const std::vector& deviceExtensions, + bool enableValidationLayers = false) override; + void CreateSurface(SDL_Window* window) override; void CreateLogicalDevice() override; void Shutdown() noexcept override; void WaitIdle() override; diff --git a/src/services/interfaces/i_vulkan_device_service.hpp b/src/services/interfaces/i_vulkan_device_service.hpp index 160b80d..647b25e 100644 --- a/src/services/interfaces/i_vulkan_device_service.hpp +++ b/src/services/interfaces/i_vulkan_device_service.hpp @@ -35,15 +35,23 @@ public: /** * @brief Initialize Vulkan instance and select physical device. * - * @param window SDL window for surface creation * @param deviceExtensions Required device extensions * @param enableValidationLayers Whether to enable validation layers * @throws std::runtime_error if initialization fails */ - virtual void Initialize(SDL_Window* window, - const std::vector& deviceExtensions, + virtual void Initialize(const std::vector& deviceExtensions, bool enableValidationLayers = false) = 0; + /** + * @brief Create Vulkan surface for the given window. + * + * Must be called after Initialize() and after window is created. + * + * @param window SDL window for surface creation + * @throws std::runtime_error if surface creation fails + */ + virtual void CreateSurface(SDL_Window* window) = 0; + /** * @brief Create the logical device and retrieve queues. *