18class MAYAFLUX_API GlfwWindow :
public Window {
27 GlfwWindow(
const WindowCreateInfo& create_info,
28 const GraphicsSurfaceInfo& surface_info, GlobalGraphicsConfig::GraphicsApi api, GlfwPreInitConfig pre_init_config = {});
30 ~GlfwWindow()
override;
32 GlfwWindow(
const GlfwWindow&) =
delete;
33 GlfwWindow& operator=(
const GlfwWindow&) =
delete;
34 GlfwWindow(GlfwWindow&&) noexcept;
35 GlfwWindow& operator=(GlfwWindow&&) noexcept;
41 void destroy() override;
43 [[nodiscard]]
bool should_close() const override;
45 [[nodiscard]] inline const WindowState& get_state()
const override
50 [[nodiscard]]
inline const WindowCreateInfo& get_create_info()
const override
55 inline void set_input_config(
const InputConfig& config)
override
57 m_input_config = config;
60 [[nodiscard]]
inline const InputConfig& get_input_config()
const override
62 return m_input_config;
65 void set_event_callback(WindowEventCallback callback)
override;
67 [[nodiscard]]
void* get_native_handle()
const override;
69 [[nodiscard]]
void* get_native_display()
const override {
return nullptr; }
71 [[nodiscard]]
inline GLFWwindow* get_glfw_handle()
const {
return m_window; }
73 void set_title(
const std::string& title)
override;
75 void set_size(uint32_t
width, uint32_t height)
override;
77 void set_position(uint32_t x, uint32_t y)
override;
79 void set_color(
const std::array<float, 4>& color)
override;
81 Vruta::WindowEventSource& get_event_source()
override {
return m_event_source; }
82 [[nodiscard]]
const Vruta::WindowEventSource& get_event_source()
const override {
return m_event_source; }
87 [[nodiscard]]
bool is_graphics_registered()
const override {
return m_graphics_registered.load(); }
93 void set_graphics_registered(
bool registered)
override;
101 void register_rendering_buffer(std::shared_ptr<Buffers::VKBuffer> buffer)
override;
107 void unregister_rendering_buffer(std::shared_ptr<Buffers::VKBuffer> buffer)
override;
116 void track_frame_command(uint64_t cmd_id)
override;
124 [[nodiscard]]
const std::vector<uint64_t>& get_frame_commands()
const override;
131 void clear_frame_commands()
override;
137 [[nodiscard]] std::vector<std::shared_ptr<Buffers::VKBuffer>> get_rendering_buffers()
const override;
139 [[nodiscard]]
bool is_capture_enabled()
const override {
return m_capture_enabled.load(std::memory_order_acquire); }
140 void set_capture_enabled(
bool enabled)
override { m_capture_enabled.store(enabled, std::memory_order_release); }
143 GLFWwindow* m_window =
nullptr;
144 WindowCreateInfo m_create_info;
146 InputConfig m_input_config;
149 std::atomic<bool> m_graphics_registered {
false };
150 std::atomic<bool> m_capture_enabled {
false };
152 Vruta::WindowEventSource m_event_source;
154 std::vector<std::weak_ptr<Buffers::VKBuffer>> m_rendering_buffers;
155 std::vector<uint64_t> m_frame_commands;
156 mutable std::mutex m_render_tracking_mutex;
158 void configure_window_hints(
const GraphicsSurfaceInfo& surface_info, GlobalGraphicsConfig::GraphicsApi api)
const;
159 void setup_callbacks();
161 static void glfw_window_size_callback(GLFWwindow* window,
int width,
int height);
162 static void glfw_window_close_callback(GLFWwindow* window);
163 static void glfw_window_focus_callback(GLFWwindow* window,
int focused);
164 static void glfw_framebuffer_size_callback(GLFWwindow* window,
int width,
int height);
165 static void glfw_key_callback(GLFWwindow* window,
int key,
int scancode,
int action,
int mods);
166 static void glfw_cursor_pos_callback(GLFWwindow* window,
double xpos,
double ypos);
167 static void glfw_mouse_button_callback(GLFWwindow* window,
int button,
int action,
int mods);
168 static void glfw_scroll_callback(GLFWwindow* window,
double xoffset,
double yoffset);
std::function< void(const WindowEvent &)> WindowEventCallback