#pragma once #include #include #include "../include/shared_types.h" // Thread-safe queue of InputEvents. Written by the Win32 message pump thread, // read by the Unity main thread via RRPOPOUT_PollInputEvents. class InputQueue { public: void push(const InputEvent& e) { std::lock_guard lock(m_mutex); if (m_queue.size() < kMaxBacklog) { m_queue.push(e); } } // Drains up to maxEvents into outEvents. Returns number written. int drain(InputEvent* outEvents, int maxEvents) { std::lock_guard lock(m_mutex); int n = 0; while (n < maxEvents && !m_queue.empty()) { outEvents[n++] = m_queue.front(); m_queue.pop(); } return n; } private: static constexpr size_t kMaxBacklog = 256; std::queue m_queue; std::mutex m_mutex; };