diff options
author | Adrian Kummerlaender | 2018-05-25 23:47:27 +0200 |
---|---|---|
committer | Adrian Kummerlaender | 2018-05-25 23:48:59 +0200 |
commit | f728e4c8d202de241673a13ce61570b6acb4bba7 (patch) | |
tree | a7e29c4319f0e6d667b98f359ddf089c0565c15a /src/glfw | |
parent | 5157658ec0cc07d2c56c978ca010cbb78236439f (diff) | |
download | computicle-f728e4c8d202de241673a13ce61570b6acb4bba7.tar computicle-f728e4c8d202de241673a13ce61570b6acb4bba7.tar.gz computicle-f728e4c8d202de241673a13ce61570b6acb4bba7.tar.bz2 computicle-f728e4c8d202de241673a13ce61570b6acb4bba7.tar.lz computicle-f728e4c8d202de241673a13ce61570b6acb4bba7.tar.xz computicle-f728e4c8d202de241673a13ce61570b6acb4bba7.tar.zst computicle-f728e4c8d202de241673a13ce61570b6acb4bba7.zip |
Restructure source directory
Diffstat (limited to 'src/glfw')
-rw-r--r-- | src/glfw/guard.h | 20 | ||||
-rw-r--r-- | src/glfw/window.h | 62 |
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); + } + +}; |