summary refs log tree commit diff
path: root/src/GFX/Window.cpp
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-10-21 01:03:18 +0200
committerMel <einebeere@gmail.com>2022-10-21 01:03:18 +0200
commit6ed978051668c08f5a957c97570f364dd580c807 (patch)
treee3db93c52fcd86e26bc859d46e755290d2a7f40c /src/GFX/Window.cpp
parent0464a83dfaebaa75d6e2d3b7431e84ebd83fccfd (diff)
downloadmeowcraft-6ed978051668c08f5a957c97570f364dd580c807.tar.zst
meowcraft-6ed978051668c08f5a957c97570f364dd580c807.zip
Namespace and Folder refactor
Diffstat (limited to 'src/GFX/Window.cpp')
-rw-r--r--src/GFX/Window.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/GFX/Window.cpp b/src/GFX/Window.cpp
new file mode 100644
index 0000000..0a1828c
--- /dev/null
+++ b/src/GFX/Window.cpp
@@ -0,0 +1,55 @@
+#include <stdexcept>
+#include "Window.hpp"
+
+namespace MC::GFX {
+
+Window::Window(const char *title, uint32_t width, uint32_t height) {
+    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
+    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
+    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
+    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
+    glfwWindowHint(GLFW_DOUBLEBUFFER, GL_TRUE);
+
+    m_window = glfwCreateWindow(width, height, title, nullptr, nullptr);
+    if (m_window == nullptr) {
+        throw std::runtime_error("Failed to create window.");
+    }
+
+    glfwMakeContextCurrent(m_window);
+    glfwSetInputMode(m_window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
+}
+
+Window::~Window() {
+    glfwDestroyWindow(m_window);
+}
+
+bool Window::should_close() {
+    return glfwWindowShouldClose(m_window);
+}
+
+GLFWwindow* Window::get() {
+    return m_window;
+}
+
+void Window::close() {
+    glfwSetWindowShouldClose(m_window, true);
+}
+
+Vector<2> Window::mouse_delta() {
+    return m_mouse.update(m_window);
+}
+
+bool Window::key(int key, int type) {
+    return (glfwGetKey(m_window, key) == type);
+}
+
+void Window::start_frame() {
+    glfwSwapBuffers(m_window);
+    glfwPollEvents();
+}
+
+void Window::on_size_change(void (callback)(GLFWwindow*, int, int)) {
+    glfwSetFramebufferSizeCallback(m_window, static_cast<GLFWframebuffersizefun>(callback));
+}
+
+}
\ No newline at end of file