sandbox
Loading...
Searching...
No Matches
devices_module.hpp
1#ifndef LIBSBX_DEVICES_DEVICES_MODULE_HPP_
2#define LIBSBX_DEVICES_DEVICES_MODULE_HPP_
3
4#include <cinttypes>
5
6#include <memory>
7#include <vector>
8#include <unordered_map>
9
10#include <fmt/format.h>
11
12#include <GLFW/glfw3.h>
13
14#include <libsbx/core/module.hpp>
16#include <libsbx/core/engine.hpp>
17
18#include <libsbx/units/time.hpp>
19
20#include <libsbx/devices/window.hpp>
21#include <libsbx/devices/input.hpp>
22
23namespace sbx::devices {
24
25class devices_module final : public core::module<devices_module> {
26
27 inline static const auto is_registered = register_module(stage::pre);
28
29public:
30
32 if (!glfwInit()) {
33 throw std::runtime_error{"Could not initialize glfw"};
34 }
35
36 if (!glfwVulkanSupported()) {
37 throw std::runtime_error{"Glfw does not support vulkan"};
38 }
39
40 _window = std::make_unique<devices::window>(window_create_info{"Demo", 1280, 720});
41 }
42
43 ~devices_module() override {
44 _window.reset();
45
46 glfwTerminate();
47 }
48
49 auto update() -> void override {
50 input::_transition_pressed_keys();
51 input::_transition_pressed_mouse_buttons();
52 input::_transition_scroll_delta();
53
54 glfwPollEvents();
55 }
56
57 auto window() -> devices::window& {
58 return *_window;
59 }
60
61 auto required_instance_extensions() const -> std::vector<const char*> {
62 auto extension_count = std::uint32_t{0};
63 auto extensions = glfwGetRequiredInstanceExtensions(&extension_count);
64
65 return std::vector<const char*>{extensions, extensions + extension_count};
66 }
67
68private:
69
70 std::unique_ptr<devices::window> _window{};
71
72}; // class devices_module
73
74} // namespace sbx::devices
75
76#endif // LIBSBX_DEVICES_DEVICES_MODULE_HPP_
Definition: module.hpp:72
Definition: devices_module.hpp:25
Definition: window.hpp:30
Definition: window.hpp:24