Brenta Engine 1.2
Loading...
Searching...
No Matches
glfw.hpp
1// SPDX-License-Identifier: MIT
2// Author: Giovanni Santini
3// Mail: giovanni.santini@proton.me
4// Github: @San7o
5
6#pragma once
7
8#include <brenta/window.hpp>
9#include <brenta/renderer/opengl/gl.hpp>
10
11#include <GLFW/glfw3.h>
12
13namespace brenta
14{
15
16//
17// Glfw Driver for Window
18// ----------------------
19//
21{
22public:
23
24 GlfwDriver() = default;
25 ~GlfwDriver() = default;
26
27 std::expected<void, std::string> initialize(const Window::Config &conf) override;
28 std::expected<void, std::string> terminate() override;
29
30 //
31 // Getters
32 //
33
34 int get_width() override;
35 int get_height() override;
36 bool should_close() override;
37 bool is_key_pressed(Key key) override;
38 Time get_time() override;
39 Window::ProcHandle get_proc_address() override;
40 Window::WindowHandle get_window() override;
41
42 //
43 // Setters
44 //
45
46 void set_mouse_capture(bool is_captured) override;
47 void set_mouse_callback(void* callback) override;
48 void set_size_callback(void* callback) override;
49 void set_mouse_pos_callback(void* callback) override;
50 void set_key_callback(void* callback) override;
51 void set_dimensions(int width, int height) override;
52
53 //
54 // Utils
55 //
56
57 void swap_buffers() override;
58 void poll_events() override;
59 void update_dimensions() override;
60 void set_context_version(int major, int minor) override;
61 void use_core_profile() override;
62 void set_hints_apple() override;
63 void make_context_current() override;
64 void close() override;
65 void create_window(int width, int height,
66 const std::string &title) override;
67
68private:
69
70 GLFWwindow *window;
71 int width = 800;
72 int height = 600;
73 Time time;
74
75 static void glfw_key_callback([[maybe_unused]] GLFWwindow *window,
76 int glfw_key,
77 [[maybe_unused]] int scancode,
78 int glfw_action,
79 int glfw_mods);
80
81 static void framebuffer_size_callback(GLFWwindow *window_backend,
82 int width, int height);
83 static void mouse_callback([[maybe_unused]] GLFWwindow *window,
84 double xpos,
85 double ypos);
86 static int key_to_glfw(Key key);
87 static Key glfw_to_key(int glfw_key);
88
89};
90
91
92} // namespace brenta