aboutsummaryrefslogtreecommitdiff
path: root/src/glfw/window.h
diff options
context:
space:
mode:
authorAdrian Kummerlaender2018-12-15 23:09:32 +0100
committerAdrian Kummerlaender2018-12-15 23:09:32 +0100
commit44f5ac32a68a617f93704d44c4339f7db13b323e (patch)
tree6c191524aca1c7dbf3329026a59cfa3bc0109d2f /src/glfw/window.h
downloadcompustream-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.h58
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);
+}