aboutsummaryrefslogtreecommitdiff
path: root/src/glfw
diff options
context:
space:
mode:
Diffstat (limited to 'src/glfw')
-rw-r--r--src/glfw/guard.h20
-rw-r--r--src/glfw/window.h62
2 files changed, 82 insertions, 0 deletions
diff --git a/src/glfw/guard.h b/src/glfw/guard.h
new file mode 100644
index 0000000..37d3ffb
--- /dev/null
+++ b/src/glfw/guard.h
@@ -0,0 +1,20 @@
+#pragma once
+
+#include <GL/glew.h>
+#include <GLFW/glfw3.h>
+
+class GlfwGuard {
+private:
+ bool _good = false;
+public:
+ GlfwGuard() {
+ _good = glfwInit();
+ }
+ ~GlfwGuard() {
+ glfwTerminate();
+ }
+
+ bool isGood() const {
+ return _good;
+ }
+};
diff --git a/src/glfw/window.h b/src/glfw/window.h
new file mode 100644
index 0000000..794dd5f
--- /dev/null
+++ b/src/glfw/window.h
@@ -0,0 +1,62 @@
+#pragma once
+
+#include <GL/glew.h>
+#include <GLFW/glfw3.h>
+
+class Window {
+private:
+ bool _good = false;
+ int _width = 800;
+ int _height = 600;
+
+ GLFWwindow* const _handle;
+
+public:
+ Window(const std::string& title):
+ _handle(glfwCreateWindow(_width, _height, title.c_str(), NULL, NULL)) {
+ if ( _handle != nullptr ) {
+ glfwMakeContextCurrent(_handle);
+ if ( glewInit() == GLEW_OK ) {
+ _good = true;
+ }
+ glfwMakeContextCurrent(nullptr);
+ }
+ }
+
+ bool isGood() const {
+ return _good;
+ }
+
+ int getWidth() const {
+ return _width;
+ }
+
+ int getHeight() const {
+ return _height;
+ }
+
+ template <class F>
+ void init(F f) {
+ glfwMakeContextCurrent(_handle);
+ f();
+ glfwMakeContextCurrent(nullptr);
+ }
+
+ template <class F>
+ void render(F loop) {
+ glfwMakeContextCurrent(_handle);
+
+ while ( glfwGetKey(_handle, GLFW_KEY_ESCAPE ) != GLFW_PRESS &&
+ glfwWindowShouldClose(_handle) == 0 ) {
+ glfwGetWindowSize(_handle, &_width, &_height);
+
+ loop();
+
+ glfwSwapBuffers(_handle);
+ glfwPollEvents();
+ }
+
+ glfwMakeContextCurrent(nullptr);
+ }
+
+};