diff options
author | Adrian Kummerlaender | 2019-04-18 22:15:39 +0200 |
---|---|---|
committer | Adrian Kummerlaender | 2019-04-18 22:15:39 +0200 |
commit | 34566b28a82869cbf004d91c6d658ba71d40ed97 (patch) | |
tree | 5322ec9bf7f48a96390d638d410aff0abfe21348 /src | |
parent | 1ad4daa0289c56e3d6b896d5037002aa6b461674 (diff) | |
download | compustream-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
Diffstat (limited to 'src')
-rw-r--r-- | src/buffer/vertex/fluid_cell_buffer.cc | 30 | ||||
-rw-r--r-- | src/buffer/vertex/fluid_cell_buffer.h | 2 | ||||
-rw-r--r-- | src/buffer/vertex/lattice_cell_buffer.cc | 14 | ||||
-rw-r--r-- | src/buffer/vertex/lattice_cell_buffer.h | 4 | ||||
-rw-r--r-- | src/main.cc | 7 | ||||
-rw-r--r-- | src/shader/code/collide.glsl | 14 |
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); |