From cc7c51ad33a898e4ce55b61a6537f2694110f10c Mon Sep 17 00:00:00 2001
From: Pascal Engeler <engelerp@phys.ethz.ch>
Date: Thu, 12 Aug 2021 22:23:41 +0200
Subject: [PATCH] Added explicit element buffer bindings for safety. If
 performance degrades, undo these changes.

---
 src/wave_handler.cpp | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/wave_handler.cpp b/src/wave_handler.cpp
index bb932f6..d50511f 100644
--- a/src/wave_handler.cpp
+++ b/src/wave_handler.cpp
@@ -84,9 +84,11 @@ void WaveHandler::prepare_step() {
   glBindTexture(GL_TEXTURE_2D, tex_comp_damp_static_);
   glActiveTexture(GL_TEXTURE1);
   glBindTexture(GL_TEXTURE_2D, tex_comp_damp_dynamic_);
+  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo_2d_);
   glBindVertexArray(vao_2d_);
   glDrawElements(GL_TRIANGLES, num_elements_2d_, GL_UNSIGNED_INT, 0);
   glBindVertexArray(0);
+  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
   glBindFramebuffer(GL_FRAMEBUFFER, 0);
 }
 
@@ -118,9 +120,11 @@ bool WaveHandler::step(Toolbox& tb, const int num_dsteps)
       glBindTexture(GL_TEXTURE_2D, tex_comp_wave_1_);
       glActiveTexture(GL_TEXTURE1);
       glBindTexture(GL_TEXTURE_2D, tex_comp_damp_);
+      glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo_2d_);
       glBindVertexArray(vao_2d_);
       glDrawElements(GL_TRIANGLES, num_elements_2d_, GL_UNSIGNED_INT, 0);
       glBindVertexArray(0);
+      glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
       tb.time += tb.dt;
 
       //swap framebuffers, repeat
@@ -134,9 +138,11 @@ bool WaveHandler::step(Toolbox& tb, const int num_dsteps)
       glBindTexture(GL_TEXTURE_2D, tex_comp_wave_0_);
       glActiveTexture(GL_TEXTURE1);
       glBindTexture(GL_TEXTURE_2D, tex_comp_damp_);
+      glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo_2d_);
       glBindVertexArray(vao_2d_);
       glDrawElements(GL_TRIANGLES, num_elements_2d_, GL_UNSIGNED_INT, 0);
       glBindVertexArray(0);
+      glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
       glBindFramebuffer(GL_FRAMEBUFFER, 0);
       tb.time += tb.dt;
     }
@@ -160,10 +166,12 @@ bool WaveHandler::render()
   glActiveTexture(GL_TEXTURE2);
   glBindTexture(GL_TEXTURE_1D, tex_palette_);
   //glBindTexture(GL_TEXTURE_2D, tex_3d_checkerboard_);
+  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo_render_);
   glBindVertexArray(vao_render_);
   glEnable(GL_MULTISAMPLE);
   glDrawElements(GL_TRIANGLES, num_elements_render_, GL_UNSIGNED_INT, 0);
   glBindVertexArray(0);
+  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
 
   return true;
 }
-- 
GitLab