2#ifndef LIBSBX_DEVICES_DEVICES_MODULE_HPP_
3#define LIBSBX_DEVICES_DEVICES_MODULE_HPP_
9#include <unordered_map>
11#include <fmt/format.h>
13#include <GLFW/glfw3.h>
15#include <libsbx/core/module.hpp>
16#include <libsbx/core/engine.hpp>
18#include <libsbx/units/time.hpp>
20#include <libsbx/memory/aligned_storage.hpp>
22#include <libsbx/devices/window.hpp>
23#include <libsbx/devices/input.hpp>
25namespace sbx::devices {
29 inline static const auto is_registered = register_module(stage::pre);
35 throw std::runtime_error{
"Could not initialize glfw"};
38 if (!glfwVulkanSupported()) {
39 throw std::runtime_error{
"Glfw does not support vulkan"};
54 const auto initial_size =
math::vector2{_window.width(), _window.height()};
56 input::set_active_viewport(
math::vector2{0.0f, 0.0f}, initial_size);
57 input::set_scene_input_active(
true);
59 _window.on_framebuffer_resized() += [](
const auto& event) {
60 input::set_active_viewport(
math::vector2{0.0f, 0.0f},
math::vector2{
static_cast<std::float_t
>(
event.width),
static_cast<std::float_t
>(event.height)});
68 auto update() ->
void override {
69 input::_transition_pressed_keys();
70 input::_transition_pressed_mouse_buttons();
71 input::_transition_scroll_delta();
80 auto required_instance_extensions()
const -> std::vector<const char*> {
81 auto extension_count = std::uint32_t{0};
82 auto** extensions = glfwGetRequiredInstanceExtensions(&extension_count);
84 return std::vector<const char*>{extensions, extensions + extension_count};
Definition: module.hpp:92
Definition: devices_module.hpp:27
Definition: window.hpp:33
A vector in two-dimensional space.
Definition: vector2.hpp:28
Definition: window.hpp:27