From aee5bf7802f112111961faa824deb6f97ef80203 Mon Sep 17 00:00:00 2001 From: Joursoir Date: Fri, 26 Mar 2021 15:32:22 +0000 Subject: add window subsystem --- src/window/Window.cpp | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/window/Window.hpp | 26 +++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 src/window/Window.cpp create mode 100644 src/window/Window.hpp diff --git a/src/window/Window.cpp b/src/window/Window.cpp new file mode 100644 index 0000000..7aef326 --- /dev/null +++ b/src/window/Window.cpp @@ -0,0 +1,70 @@ +#include +#include +#include + +#include "Window.hpp" + +/* static method */ +Window *Window::Initialize(int width, int height, const char *title) +{ + GLFWwindow *win; + glfwDefaultWindowHints(); + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); + /*glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GLFW_TRUE); + glfwSetErrorCallback(error_callback);*/ + + win = glfwCreateWindow(width, height, title, 0, 0); + if(!win) { + fprintf(stderr, "Failed to create GLFW window\n"); + return 0; + } + glfwMakeContextCurrent(win); + + glewExperimental = GL_TRUE; + int result = glewInit(); + if(result != GLEW_OK) { + fprintf(stderr, "Failed to init GLEW: %s\n", title); + return 0; + } + + Window *w = new Window(win, width, height); + w->MakeContextCurrent(); + return w; +} + +void Window::Resize(int w, int h) +{ + width = w; + height = h; + if(glfwGetCurrentContext() == win) + glViewport(0, 0, width, height); +} + +void Window::MakeContextCurrent() +{ + glfwMakeContextCurrent(win); + glViewport(0, 0, width, height); +} + +void Window::SetCursorMode(int mode) +{ + glfwSetInputMode(win, GLFW_CURSOR, mode); +} + +bool Window::IsShouldClose() +{ + return glfwWindowShouldClose(win); +} + +void Window::SetShouldClose(int flag) +{ + glfwSetWindowShouldClose(win, flag); +} + +void Window::SwapBuffers() +{ + glfwSwapBuffers(win); +} diff --git a/src/window/Window.hpp b/src/window/Window.hpp new file mode 100644 index 0000000..fe3b054 --- /dev/null +++ b/src/window/Window.hpp @@ -0,0 +1,26 @@ +#ifndef ENGINE_WINDOW_H +#define ENGINE_WINDOW_H + +class GLFWwindow; + +class Window { + GLFWwindow *win; + int width, height; + + Window(GLFWwindow *a_win, int a_w, int a_h) : win(a_win), + width(a_w), height(a_h) { } +public: + ~Window() { } + GLFWwindow *GetWin() { return win; } + + static Window *Initialize(int width, int height, const char *title); + + void Resize(int w, int h); + void MakeContextCurrent(); + void SetCursorMode(int mode); + bool IsShouldClose(); + void SetShouldClose(int flag); + void SwapBuffers(); +}; + +#endif /* ENGINE_WINDOW_H */ -- cgit v1.2.3-18-g5258