3#ifdef MAYAFLUX_PLATFORM_WINDOWS
27class MAYAFLUX_API Win32Window :
public Window {
29 Win32Window(
const WindowCreateInfo& create_info,
30 const GlobalGraphicsConfig& graphics_config);
32 ~Win32Window()
override;
34 Win32Window(
const Win32Window&) =
delete;
35 Win32Window& operator=(
const Win32Window&) =
delete;
36 Win32Window(Win32Window&&) =
delete;
37 Win32Window& operator=(Win32Window&&) =
delete;
44 [[nodiscard]]
bool should_close()
const override;
45 void request_close()
override;
47 [[nodiscard]]
const WindowState& get_state()
const override {
return m_state; }
48 [[nodiscard]]
const WindowCreateInfo& get_create_info()
const override {
return m_create_info; }
50 void set_input_config(
const InputConfig& config)
override { m_input_config = config; }
51 [[nodiscard]]
const InputConfig& get_input_config()
const override {
return m_input_config; }
53 void set_event_callback(WindowEventCallback
callback)
override;
55 [[nodiscard]]
void* get_native_handle()
const override {
return m_hwnd; }
56 [[nodiscard]]
void* get_native_display()
const override {
return nullptr; }
58 void set_title(
const std::string& title)
override;
59 void set_size(uint32_t
width, uint32_t
height)
override;
60 void set_position(uint32_t x, uint32_t y)
override;
61 void set_color(
const std::array<float, 4>&
color)
override;
63 static LRESULT
CALLBACK wnd_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp);
65 Vruta::WindowEventSource& get_event_source()
override {
return m_event_source; }
66 [[nodiscard]]
const Vruta::WindowEventSource& get_event_source()
const override {
return m_event_source; }
68 [[nodiscard]]
bool is_graphics_registered()
const override {
return m_graphics_registered.load(); }
69 void set_graphics_registered(
bool registered)
override { m_graphics_registered.store(registered); }
71 void register_rendering_buffer(std::shared_ptr<Buffers::VKBuffer>
buffer)
override;
72 void unregister_rendering_buffer(std::shared_ptr<Buffers::VKBuffer>
buffer)
override;
73 void track_frame_command(uint64_t cmd_id)
override;
74 [[nodiscard]]
const std::vector<uint64_t>& get_frame_commands()
const override;
75 void clear_frame_commands()
override;
76 [[nodiscard]] std::vector<std::shared_ptr<Buffers::VKBuffer>> get_rendering_buffers()
const override;
78 [[nodiscard]]
bool is_capture_enabled()
const override {
return m_capture_enabled.load(std::memory_order_acquire); }
79 void set_capture_enabled(
bool enabled)
override { m_capture_enabled.store(enabled, std::memory_order_release); }
82 HWND m_hwnd {
nullptr };
83 HINSTANCE m_hinstance {
nullptr };
85 std::thread m_ui_thread;
86 std::atomic<bool> m_hwnd_ready {
false };
87 std::atomic<bool> m_should_close {
false };
88 std::atomic<bool> m_capture_enabled {
false };
89 std::atomic<bool> m_in_size_move {
false };
91 static constexpr size_t EVENT_QUEUE_CAPACITY = 256;
93 Memory::LockFreeQueue<WindowEvent, EVENT_QUEUE_CAPACITY> m_event_queue;
95 KeyRepeatConfig m_key_repeat_config;
96 WindowCreateInfo m_create_info;
98 InputConfig m_input_config;
101 std::atomic<bool> m_graphics_registered {
false };
102 Vruta::WindowEventSource m_event_source;
103 std::atomic<bool> m_keys_dirty {
false };
104 std::unordered_map<int16_t, WindowEvent::KeyData> m_held_keys_ui;
105 std::unordered_map<int16_t, WindowEvent::KeyData> m_held_keys;
106 ULONGLONG m_repeat_next_tick { 0 };
107 uint16_t m_pending_high_surrogate { 0 };
109 std::vector<std::weak_ptr<Buffers::VKBuffer>> m_rendering_buffers;
110 std::vector<uint64_t> m_frame_commands;
111 mutable std::mutex m_render_tracking_mutex;
113 void ui_thread_main();
114 void push_event(WindowEvent ev);
std::shared_ptr< NetworkGeometryBuffer > buffer
std::function< void(const WindowEvent &)> WindowEventCallback
@ CALLBACK
Use callback for custom transition.