#pragma once #define GLFW_INCLUDE_VULKAN #include "GLFW/glfw3.h" #ifndef VK_SUCCESS #include #endif #include #include "containers/basalt_darray.h" namespace basalt { class Context; class Window { public: Window(const Window& src) = delete; Window& operator =(const Window& src) = delete; Window(Window&& other) noexcept; Window& operator =(Window&& other) noexcept; Window(basalt::Context& ctx, uint16_t width, uint16_t height, const char* title); ~Window(void) noexcept; void swap(Window& other) noexcept; operator GLFWwindow* (void) const noexcept; operator VkSurfaceKHR (void) const noexcept; const bool should_close(void) const noexcept; protected: basalt::Context* ctx; GLFWwindow* window = nullptr; VkSurfaceKHR surface; const char* window_title = "N/A"; uint16_t width = 0; uint16_t height = 0; }; }