/// ============================================= // Aster: swapchain.h // Copyright (c) 2020-2024 Anish Bhobe // ============================================== #pragma once #include "global.h" #include "size.h" #include struct PhysicalDevice; struct Surface; struct Device; struct Swapchain final { using FnResizeCallback = eastl::function; const Device *m_Device; vk::SwapchainKHR m_Swapchain; NameString m_Name; vk::Extent2D m_Extent; vk::Format m_Format; eastl::fixed_vector m_Images; eastl::fixed_vector m_ImageViews; eastl::vector m_ResizeCallbacks; void Create(const Surface *window, Size2D size); void RegisterResizeCallback(FnResizeCallback &&callback); // Ctor/Dtor Swapchain(const Surface *window, const Device *device, Size2D size, NameString &&name); ~Swapchain(); // Move Swapchain(Swapchain &&other) noexcept; Swapchain &operator=(Swapchain &&other) noexcept; DISALLOW_COPY_AND_ASSIGN(Swapchain); private: void Cleanup(); };