aboutsummaryrefslogtreecommitdiffstats
path: root/src/window/Window.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/window/Window.cpp')
-rw-r--r--src/window/Window.cpp70
1 files changed, 70 insertions, 0 deletions
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 <stdio.h>
+#include <GL/glew.h>
+#include <GLFW/glfw3.h>
+
+#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);
+}