#pragma once #include "graphics/opengl/framebuffer.hpp" #include #include #include #include namespace kuiper { class window { public: virtual ~window() = default; virtual void* get_native_handle() const noexcept = 0; virtual void set_title(std::u8string_view title) noexcept = 0; virtual void poll_events() noexcept = 0; virtual void swap_buffers() noexcept = 0; virtual void set_swap_interval(std::uint32_t interval) noexcept = 0; virtual void bind_context() noexcept = 0; virtual gl::framebuffer::s_ptr back_buffer() const noexcept = 0; virtual bool should_close() const noexcept = 0; virtual bool is_minimised() const noexcept = 0; virtual bool is_cursor_locked() const noexcept = 0; virtual void lock_cursor() noexcept = 0; virtual void unlock_cursor() noexcept = 0; virtual void enable_raw_input() noexcept = 0; virtual void disable_raw_input() noexcept = 0; virtual glm::uvec2 get_size() const noexcept = 0; virtual glm::uvec2 get_framebuffer_size() const noexcept = 0; // should this go in render context? virtual glm::vec2 get_content_scale() const noexcept = 0; }; } // namespace kuiper