aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Kummerlaender2019-04-18 22:15:39 +0200
committerAdrian Kummerlaender2019-04-18 22:15:39 +0200
commit34566b28a82869cbf004d91c6d658ba71d40ed97 (patch)
tree5322ec9bf7f48a96390d638d410aff0abfe21348
parent1ad4daa0289c56e3d6b896d5037002aa6b461674 (diff)
downloadcompustream-34566b28a82869cbf004d91c6d658ba71d40ed97.tar
compustream-34566b28a82869cbf004d91c6d658ba71d40ed97.tar.gz
compustream-34566b28a82869cbf004d91c6d658ba71d40ed97.tar.bz2
compustream-34566b28a82869cbf004d91c6d658ba71d40ed97.tar.lz
compustream-34566b28a82869cbf004d91c6d658ba71d40ed97.tar.xz
compustream-34566b28a82869cbf004d91c6d658ba71d40ed97.tar.zst
compustream-34566b28a82869cbf004d91c6d658ba71d40ed97.zip
Bind key to reset lattice buffers
i.e. restarting the simulation without clearing the geometry
-rw-r--r--src/buffer/vertex/fluid_cell_buffer.cc30
-rw-r--r--src/buffer/vertex/fluid_cell_buffer.h2
-rw-r--r--src/buffer/vertex/lattice_cell_buffer.cc14
-rw-r--r--src/buffer/vertex/lattice_cell_buffer.h4
-rw-r--r--src/main.cc7
-rw-r--r--src/shader/code/collide.glsl14
6 files changed, 42 insertions, 29 deletions
diff --git a/src/buffer/vertex/fluid_cell_buffer.cc b/src/buffer/vertex/fluid_cell_buffer.cc
index 4930d63..8fdc579 100644
--- a/src/buffer/vertex/fluid_cell_buffer.cc
+++ b/src/buffer/vertex/fluid_cell_buffer.cc
@@ -4,17 +4,27 @@
FluidCellBuffer::FluidCellBuffer(GLuint nX, GLuint nY, std::function<int(int,int)>&& geometry):
_nX(nX), _nY(nY) {
- glGenVertexArrays(1, &_array);
glGenBuffers(1, &_buffer);
-
glBindVertexArray(_array);
+ init(std::forward<decltype(geometry)>(geometry));
+ glEnableVertexAttribArray(0);
+ glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, nullptr);
+
+}
+
+FluidCellBuffer::~FluidCellBuffer() {
+ glDeleteBuffers(1, &_buffer);
+ glDeleteVertexArrays(1, &_array);
+}
+
+void FluidCellBuffer::init(std::function<int(int,int)>&& geometry) {
glBindBuffer(GL_ARRAY_BUFFER, _buffer);
- std::vector<GLfloat> data(3*nX*nY, GLfloat{});
+ std::vector<GLfloat> data(3*_nX*_nY, GLfloat{});
- for ( int x = 0; x < nX; ++x ) {
- for ( int y = 0; y < nY; ++y ) {
- data[3*nX*y + 3*x + 2] = geometry(x,y);
+ for ( int x = 0; x < _nX; ++x ) {
+ for ( int y = 0; y < _nY; ++y ) {
+ data[3*_nX*y + 3*x + 2] = geometry(x,y);
}
}
@@ -24,14 +34,6 @@ FluidCellBuffer::FluidCellBuffer(GLuint nX, GLuint nY, std::function<int(int,int
data.data(),
GL_DYNAMIC_DRAW
);
-
- glEnableVertexAttribArray(0);
- glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, nullptr);
-}
-
-FluidCellBuffer::~FluidCellBuffer() {
- glDeleteBuffers(1, &_buffer);
- glDeleteVertexArrays(1, &_array);
}
GLuint FluidCellBuffer::getBuffer() const {
diff --git a/src/buffer/vertex/fluid_cell_buffer.h b/src/buffer/vertex/fluid_cell_buffer.h
index 8afb342..791ebea 100644
--- a/src/buffer/vertex/fluid_cell_buffer.h
+++ b/src/buffer/vertex/fluid_cell_buffer.h
@@ -16,6 +16,8 @@ public:
FluidCellBuffer(GLuint nX, GLuint nY, std::function<int(int,int)>&& geometry);
~FluidCellBuffer();
+ void init(std::function<int(int,int)>&& geometry);
+
GLuint getBuffer() const;
void draw() const;
diff --git a/src/buffer/vertex/lattice_cell_buffer.cc b/src/buffer/vertex/lattice_cell_buffer.cc
index 2011b14..f3ef47d 100644
--- a/src/buffer/vertex/lattice_cell_buffer.cc
+++ b/src/buffer/vertex/lattice_cell_buffer.cc
@@ -20,13 +20,15 @@ std::vector<GLfloat> makeLattice(GLuint nX, GLuint nY) {
return data;
}
-LatticeCellBuffer::LatticeCellBuffer(GLuint nX, GLuint nY) {
- glGenVertexArrays(1, &_array);
+LatticeCellBuffer::LatticeCellBuffer(GLuint nX, GLuint nY):
+ _nX(nX), _nY(nY) {
glGenBuffers(1, &_buffer);
+ init();
+}
- const std::vector<GLfloat> data = makeLattice(nX, nY);
+void LatticeCellBuffer::init() {
+ const std::vector<GLfloat> data = makeLattice(_nX, _nY);
- glBindVertexArray(_array);
glBindBuffer(GL_ARRAY_BUFFER, _buffer);
glBufferData(
GL_ARRAY_BUFFER,
@@ -34,14 +36,10 @@ LatticeCellBuffer::LatticeCellBuffer(GLuint nX, GLuint nY) {
data.data(),
GL_DYNAMIC_DRAW
);
-
- glEnableVertexAttribArray(0);
- glVertexAttribPointer(0, 1, GL_FLOAT, GL_FALSE, 0, nullptr);
}
LatticeCellBuffer::~LatticeCellBuffer() {
glDeleteBuffers(1, &_buffer);
- glDeleteVertexArrays(1, &_array);
}
GLuint LatticeCellBuffer::getBuffer() const {
diff --git a/src/buffer/vertex/lattice_cell_buffer.h b/src/buffer/vertex/lattice_cell_buffer.h
index e5e00a4..cabff67 100644
--- a/src/buffer/vertex/lattice_cell_buffer.h
+++ b/src/buffer/vertex/lattice_cell_buffer.h
@@ -4,6 +4,8 @@
class LatticeCellBuffer {
private:
+ GLuint _nX;
+ GLuint _nY;
GLuint _array;
GLuint _buffer;
@@ -11,5 +13,7 @@ public:
LatticeCellBuffer(GLuint nX, GLuint nY);
~LatticeCellBuffer();
+ void init();
+
GLuint getBuffer() const;
};
diff --git a/src/main.cc b/src/main.cc
index c69bbe1..f3f14ec 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -105,6 +105,8 @@ int render() {
return -1;
}
+ auto reset_key = window.getKeyWatcher(GLFW_KEY_R);
+
auto pause_key = window.getKeyWatcher(GLFW_KEY_SPACE);
bool update_lattice = true;
@@ -135,6 +137,11 @@ int render() {
bool tick = true;
window.render([&](bool window_size_changed) {
+ if ( reset_key.wasClicked() ) {
+ iT = 0;
+ lattice_a->init();
+ lattice_b->init();
+ }
if ( pause_key.wasClicked() ) {
update_lattice = !update_lattice;
}
diff --git a/src/shader/code/collide.glsl b/src/shader/code/collide.glsl
index d877634..e2c3212 100644
--- a/src/shader/code/collide.glsl
+++ b/src/shader/code/collide.glsl
@@ -13,13 +13,6 @@ uniform uint iT;
uniform bool show_fluid_quality;
-/// Fluid characteristics
-
-const float physCharLength = 1.0;
-const float physCharVelocity = 1.0;
-const float physViscosity = 0.01;
-const float latticeCharVelocity = 0.01;
-
/// LBM constants
const uint q = 9;
@@ -30,6 +23,13 @@ const float weight[q] = float[](
);
const float invCs2 = 1./3.;
+/// Fluid characteristics
+
+const float physCharLength = 1.0;
+const float physCharVelocity = 1.0;
+const float physViscosity = 0.01;
+const float latticeCharVelocity = 0.1;
+
/// Unit conversion
const float resolution = max(nX,nY);