diff --git a/applications/plugins/VolumetricRendering/examples/share/shaders/tetra.frag b/applications/plugins/VolumetricRendering/examples/share/shaders/tetra.frag index 8ac26097cb3..c4a64b8d353 100644 --- a/applications/plugins/VolumetricRendering/examples/share/shaders/tetra.frag +++ b/applications/plugins/VolumetricRendering/examples/share/shaders/tetra.frag @@ -1,3 +1,5 @@ +#version 140 + uniform float u_enableLight; //GLSL >= 130 diff --git a/applications/plugins/VolumetricRendering/examples/share/shaders/tetra.vert b/applications/plugins/VolumetricRendering/examples/share/shaders/tetra.vert index f853623ad1d..823e83e4def 100644 --- a/applications/plugins/VolumetricRendering/examples/share/shaders/tetra.vert +++ b/applications/plugins/VolumetricRendering/examples/share/shaders/tetra.vert @@ -1,4 +1,4 @@ -#version 130 +#version 140 // uniform vec4 vertexColor; in vec4 a_vertexColor; diff --git a/applications/plugins/VolumetricRendering/examples/share/shaders/tetra_triangles.geo b/applications/plugins/VolumetricRendering/examples/share/shaders/tetra_triangles.geo index 2d9940dfb09..472c534595a 100644 --- a/applications/plugins/VolumetricRendering/examples/share/shaders/tetra_triangles.geo +++ b/applications/plugins/VolumetricRendering/examples/share/shaders/tetra_triangles.geo @@ -1,4 +1,4 @@ -#version 130 +#version 140 #extension GL_EXT_geometry_shader4: enable //GLSL >= 130 diff --git a/applications/plugins/VolumetricRendering/src/VolumetricRendering/OglVolumetricModel.cpp b/applications/plugins/VolumetricRendering/src/VolumetricRendering/OglVolumetricModel.cpp index cbae8eb96c9..36605896fa4 100644 --- a/applications/plugins/VolumetricRendering/src/VolumetricRendering/OglVolumetricModel.cpp +++ b/applications/plugins/VolumetricRendering/src/VolumetricRendering/OglVolumetricModel.cpp @@ -155,7 +155,6 @@ void OglVolumetricModel::init() if (b_useTopology) computeMeshFromTopology(); - updateVisual(); } @@ -221,7 +220,6 @@ void OglVolumetricModel::initVisual() m_vertexColors->init(); m_vertexColors->initVisual(); - } void OglVolumetricModel::updateVisual() @@ -357,27 +355,38 @@ void OglVolumetricModel::computeBarycenters() if (!b_tboCreated) { //Texture buffer objects + if (m_tetraBarycenters.size() > 0) + { + glGenBuffers(1, &m_tetraBarycentersTbo); + glBindBuffer(GL_TEXTURE_BUFFER, m_tetraBarycentersTbo); + glBufferData(GL_TEXTURE_BUFFER, tetraBarycentersBufferSize, &(m_tetraBarycenters[0]), GL_DYNAMIC_COPY); + glGenTextures(1, &m_tetraBarycentersTboTexture); + glBindBuffer(GL_TEXTURE_BUFFER, 0); + b_tboCreated = true; + } + if (m_hexaBarycenters.size() > 0) + { + glGenBuffers(1, &m_hexaBarycentersTbo); + glBindBuffer(GL_TEXTURE_BUFFER, m_hexaBarycentersTbo); + glBufferData(GL_TEXTURE_BUFFER, hexaBarycentersBufferSize, &(m_hexaBarycenters[0]), GL_DYNAMIC_COPY); + glGenTextures(1, &m_hexaBarycentersTboTexture); + glBindBuffer(GL_TEXTURE_BUFFER, 0); + b_tboCreated = true; + } + } - glGenBuffers(1, &m_tetraBarycentersTbo); + if (m_tetraBarycenters.size() > 0) + { glBindBuffer(GL_TEXTURE_BUFFER, m_tetraBarycentersTbo); - glBufferData(GL_TEXTURE_BUFFER, tetraBarycentersBufferSize, &(m_tetraBarycenters[0]), GL_DYNAMIC_COPY); - glGenTextures(1, &m_tetraBarycentersTboTexture); + glBufferSubData(GL_TEXTURE_BUFFER, 0, tetraBarycentersBufferSize, &(m_tetraBarycenters[0])); glBindBuffer(GL_TEXTURE_BUFFER, 0); - - glGenBuffers(1, &m_hexaBarycentersTbo); + } + if (m_hexaBarycenters.size() > 0) + { glBindBuffer(GL_TEXTURE_BUFFER, m_hexaBarycentersTbo); - glBufferData(GL_TEXTURE_BUFFER, hexaBarycentersBufferSize, &(m_hexaBarycenters[0]), GL_DYNAMIC_COPY); - glGenTextures(1, &m_hexaBarycentersTboTexture); + glBufferSubData(GL_TEXTURE_BUFFER, 0, hexaBarycentersBufferSize, &(m_hexaBarycenters[0])); glBindBuffer(GL_TEXTURE_BUFFER, 0); - - b_tboCreated = true; } - - glBindBuffer(GL_TEXTURE_BUFFER, m_tetraBarycentersTbo); - glBufferSubData(GL_TEXTURE_BUFFER, 0, tetraBarycentersBufferSize, &(m_tetraBarycenters[0])); - glBindBuffer(GL_TEXTURE_BUFFER, m_hexaBarycentersTbo); - glBufferSubData(GL_TEXTURE_BUFFER, 0, hexaBarycentersBufferSize, &(m_hexaBarycenters[0])); - glBindBuffer(GL_TEXTURE_BUFFER, 0); } void OglVolumetricModel::handleTopologyChange() @@ -440,6 +449,7 @@ void OglVolumetricModel::drawTransparent(const core::visual::VisualParams* vpara const type::vector& hexahedra = d_hexahedra.getValue(); //glEnable(GL_CLIP_DISTANCE0); + if (tetrahedra.size() > 0) { glBindTexture(GL_TEXTURE_BUFFER, m_tetraBarycentersTboTexture);