SDEngine
Game Engine
Loading...
Searching...
No Matches
WindowManager.hpp
Go to the documentation of this file.
1// TODO(docs): Add file-level Doxygen header
2// - @file WindowManager.hpp
3// - @brief Multi-window management for GLFW and Vulkan windows
4// - Relationship to ViewManager and Application
5#pragma once
6
7#include <memory>
8#include <unordered_map>
9#include <vector>
10
12#include "SD/core/LayerList.hpp"
13#include "SD/core/Window.hpp"
14#include "SD/core/id_types.hpp"
16#include "SDImGuiContext.hpp"
18
19namespace sd {
20
21class ViewManager;
22
23// TODO(docs): Document WindowProps struct
24// - Each field's purpose
25// - Default values rationale
27 std::string title;
29 explicit WindowProps(const std::string& title = "SD Engine", int width = 1280, int height = 720) :
31};
32
34 std::function<void()> close_app;
35 std::function<void(Event&)> on_app_event;
36};
37// TODO(docs): Document WindowManager class
38// - Purpose: Manages multiple windows (GLFW + Vulkan)
39// - Window lifecycle (Create, Destroy, ProcessPendingCloses)
40// - WindowData structure (logic window, render window, layers)
41// - Update/Draw loop integration
42// - Example: Creating and managing multiple windows
44public:
47
49 void destroy(WindowId id);
51
54
55 struct WindowData {
56 std::unique_ptr<Window> logic;
57 std::unique_ptr<VulkanWindow> render;
59
60 WindowData() = default;
61 WindowData(WindowData&&) = default;
63 WindowData(const WindowData&) = delete;
64 WindowData& operator=(const WindowData&) = delete;
65 };
66
67 auto& get_windows() { return m_windows; }
68 const auto& get_windows() const { return m_windows; }
69
70 void update_windows(float dt);
72
73private:
74 void update_window(WindowId id, WindowData& data, float dt);
75 void draw_window(WindowId id, WindowData& data, ViewManager& viewManager);
76
80
82
83 std::unordered_map<WindowId, WindowData> m_windows;
85 std::vector<WindowId> m_pending_close;
86};
87
88} // namespace sd
Definition Event.hpp:56
Definition LayerList.hpp:21
Definition SDImGuiContext.hpp:27
Definition ViewManager.hpp:26
Definition VulkanContext.hpp:22
Definition VulkanRenderer.hpp:22
Definition VulkanWindow.hpp:35
Definition WindowManager.hpp:43
VulkanRenderer & m_renderer
Definition WindowManager.hpp:79
auto & get_windows()
Definition WindowManager.hpp:67
const auto & get_windows() const
Definition WindowManager.hpp:68
VulkanContext & m_vulkan_ctx
Definition WindowManager.hpp:77
void update_window(WindowId id, WindowData &data, float dt)
Definition WindowManager.cpp:86
std::unordered_map< WindowId, WindowData > m_windows
Definition WindowManager.hpp:83
void process_pending_closes()
Definition WindowManager.cpp:52
VulkanWindow & get_render_window(WindowId id)
Definition WindowManager.cpp:65
void update_windows(float dt)
Definition WindowManager.cpp:72
WindowId create(const WindowProps &props)
Definition WindowManager.cpp:18
WindowManagerCallbacks m_callbacks
Definition WindowManager.hpp:81
SDImGuiContext & m_imgui_ctx
Definition WindowManager.hpp:78
WindowId m_next_window_id
Definition WindowManager.hpp:84
void destroy(WindowId id)
Definition WindowManager.cpp:44
Window & get_window(WindowId id)
Definition WindowManager.cpp:59
std::vector< WindowId > m_pending_close
Definition WindowManager.hpp:85
void draw_window(WindowId id, WindowData &data, ViewManager &viewManager)
Definition WindowManager.cpp:128
void draw_windows(ViewManager &viewManager)
Definition WindowManager.cpp:78
Definition Window.hpp:49
Definition Application.hpp:28
Definition EngineServices.hpp:10
Definition id_types.hpp:28
Definition WindowManager.hpp:33
std::function< void()> close_app
Definition WindowManager.hpp:34
std::function< void(Event &)> on_app_event
Definition WindowManager.hpp:35
Definition WindowManager.hpp:55
WindowData & operator=(WindowData &&)=default
std::unique_ptr< VulkanWindow > render
Definition WindowManager.hpp:57
std::unique_ptr< Window > logic
Definition WindowManager.hpp:56
LayerList view_layers
Definition WindowManager.hpp:58
WindowData(const WindowData &)=delete
WindowData & operator=(const WindowData &)=delete
WindowData(WindowData &&)=default
Definition WindowManager.hpp:26
std::string title
Definition WindowManager.hpp:27
WindowProps(const std::string &title="SD Engine", int width=1280, int height=720)
Definition WindowManager.hpp:29
int height
Definition WindowManager.hpp:28
int width
Definition WindowManager.hpp:28
constexpr T g_type_max
Definition types.hpp:21