diff options
author | Adrian Kummerlaender | 2018-12-15 23:09:32 +0100 |
---|---|---|
committer | Adrian Kummerlaender | 2018-12-15 23:09:32 +0100 |
commit | 44f5ac32a68a617f93704d44c4339f7db13b323e (patch) | |
tree | 6c191524aca1c7dbf3329026a59cfa3bc0109d2f /src/glfw/window.h | |
download | compustream-44f5ac32a68a617f93704d44c4339f7db13b323e.tar compustream-44f5ac32a68a617f93704d44c4339f7db13b323e.tar.gz compustream-44f5ac32a68a617f93704d44c4339f7db13b323e.tar.bz2 compustream-44f5ac32a68a617f93704d44c4339f7db13b323e.tar.lz compustream-44f5ac32a68a617f93704d44c4339f7db13b323e.tar.xz compustream-44f5ac32a68a617f93704d44c4339f7db13b323e.tar.zst compustream-44f5ac32a68a617f93704d44c4339f7db13b323e.zip |
Hacky D2Q9 BGK LBM on GPU using GLSL compute shaders
Improvised on top of computicles's scaffolding.
Works in a world where _works_ is defined as "displays stuff on screen that invokes thoughts of fluid movement".
Diffstat (limited to 'src/glfw/window.h')
-rw-r--r-- | src/glfw/window.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/glfw/window.h b/src/glfw/window.h new file mode 100644 index 0000000..92a1b56 --- /dev/null +++ b/src/glfw/window.h @@ -0,0 +1,58 @@ +#pragma once + +#include <string> + +#include <GL/glew.h> +#include <GLFW/glfw3.h> + +#include "key_watcher.h" + +class Window { +private: + bool _good = false; + int _width = 800; + int _height = 600; + + GLFWwindow* const _handle; + +public: + Window(const std::string& title); + ~Window(); + + bool isGood() const; + + int getWidth() const; + int getHeight() const; + + KeyWatcher getKeyWatcher(int key); + + template <class F> + void init(F f); + + template <class F> + void render(F loop); +}; + +template <class F> +void Window::init(F f) { + glfwMakeContextCurrent(_handle); + f(); + glfwMakeContextCurrent(nullptr); +} + +template <class F> +void Window::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); +} |