6#include <brenta/logger.hpp>
7#include <brenta/window.hpp>
8#include <brenta/renderer/opengl/framebuffer.hpp>
10#include <brenta/drivers/glfw.hpp>
15using namespace brenta;
21tenno::shared_ptr<Window::Driver> Window::backend =
nullptr;
22tenno::shared_ptr<FrameBuffer> Window::framebuffer =
nullptr;
23const std::string Window::subsystem_name =
"window";
25bool Window::initialized =
false;
31std::expected<void, Subsystem::Error> Window::initialize()
33 if (this->is_initialized())
return {};
35 Window::backend = tenno::make_shared<GlfwDriver>();
36 auto ret = Window::backend->initialize(Window::init_config);
39 ERROR(
"{}: Failed to initialize window", Window::subsystem_name);
43 Window::framebuffer = tenno::make_shared<FrameBuffer>();
44 Window::get_driver()->set_dimensions(Window::init_config.width,
45 Window::init_config.height);
47 INFO(
"{}: initialized", Window::subsystem_name);
48 Window::initialized =
true;
52std::expected<void, Subsystem::Error> Window::terminate()
54 if (!this->is_initialized())
return {};
57 Window::backend->terminate();
59 Window::initialized =
false;
60 INFO(
"{}: terminated", Window::subsystem_name);
64std::string Window::name()
66 return Window::subsystem_name;
69bool Window::is_initialized()
71 return Window::initialized;
84bool Window::should_close()
87 return Window::backend->should_close();
91bool Window::is_key_pressed(Key key)
94 return Window::backend->is_key_pressed(key);
98Time Window::get_time()
101 return Window::backend->get_time();
105Window::WindowHandle Window::get_window()
108 return Window::backend->get_window();
112Window::ProcHandle Window::get_proc_address()
115 return Window::backend->get_proc_address();
119int Window::get_width()
122 return Window::backend->get_width();
126int Window::get_height()
129 return Window::backend->get_height();
133tenno::shared_ptr<Window::Driver> Window::get_driver()
135 return Window::backend;
138void Window::update_dimensions()
141 Window::backend->update_dimensions();
144void Window::set_dimensions(
int width,
int height)
147 Window::backend->set_dimensions(width, height);
151void Window::set_mouse_callback(Window::Callback callback)
154 Window::backend->set_mouse_callback(callback);
158void Window::set_size_callback(Window::Callback callback)
161 Window::backend->set_size_callback(callback);
165void Window::set_mouse_capture(
bool is_captured)
168 Window::backend->set_mouse_capture(is_captured);
175 Window::backend->close();
179void Window::swap_buffers()
182 Window::backend->swap_buffers();
186void Window::poll_events()
189 Window::backend->poll_events();
193void Window::set_key_callback(Window::Callback callback)
196 Window::backend->set_key_callback(callback);
199void Window::set_mouse_pos_callback(Window::Callback callback)
202 Window::backend->set_mouse_pos_callback(callback);
205void Window::make_context_current()
208 Window::backend->make_context_current();
218 this->conf.width = width;
224 this->conf.height = height;
230 this->conf.title = title;
236 this->conf.capture_mouse =
true;
242 this->conf.msaa =
true;
248 this->conf.debug =
true;
254 this->conf.vsync =
true;
260 Window::init_config = this->conf;
261 return Window::instance();