From 191e4e4d75c2a3c343e843c0161b76f067ba2de6 Mon Sep 17 00:00:00 2001 From: Sebastian Piwell Date: Wed, 27 Apr 2016 18:06:41 -0400 Subject: [PATCH] Set up for multipletextures in dataplane --- modules/iswa/rendering/cygnetplane.cpp | 16 +++++++++------- modules/iswa/rendering/cygnetplane.h | 1 + modules/iswa/rendering/dataplane.cpp | 5 +++++ modules/iswa/rendering/dataplane.h | 2 ++ modules/iswa/rendering/kameleonplane.h | 1 + modules/iswa/rendering/textureplane.h | 1 + modules/iswa/shaders/dataplane_fs.glsl | 24 +++++++++++++++++++++--- 7 files changed, 40 insertions(+), 10 deletions(-) diff --git a/modules/iswa/rendering/cygnetplane.cpp b/modules/iswa/rendering/cygnetplane.cpp index 9f342eae96..5f7ecff071 100644 --- a/modules/iswa/rendering/cygnetplane.cpp +++ b/modules/iswa/rendering/cygnetplane.cpp @@ -88,26 +88,28 @@ void CygnetPlane::render(const RenderData& data){ glEnable(GL_ALPHA_TEST); glDisable(GL_CULL_FACE); + _shader->setUniform("ViewProjection", data.camera.viewProjectionMatrix()); _shader->setUniform("ModelTransform", transform); + setUniforms(); setPscUniforms(*_shader.get(), data.camera, position); - ghoul::opengl::TextureUnit tfUnits; + ghoul::opengl::TextureUnit tfUnits[_transferFunctions.size()]; if(!_transferFunctions.empty()){ if(_transferFunctions.size() == 1){ - tfUnits.activate(); + tfUnits[0].activate(); _transferFunctions[0]->bind(); - _shader->setUniform("tf", tfUnits); + _shader->setUniform("tf", tfUnits[0]); } } - ghoul::opengl::TextureUnit txUnits; + ghoul::opengl::TextureUnit txUnits[_textures.size()]; if(_textures.size() == 1){ - txUnits.activate(); + txUnits[0].activate(); _textures[0]->bind(); - _shader->setUniform("texture1", txUnits); - } + _shader->setUniform("texture1", txUnits[0]); + } glBindVertexArray(_quad); glDrawArrays(GL_TRIANGLES, 0, 6); diff --git a/modules/iswa/rendering/cygnetplane.h b/modules/iswa/rendering/cygnetplane.h index b5292e5bc0..5a956232cb 100644 --- a/modules/iswa/rendering/cygnetplane.h +++ b/modules/iswa/rendering/cygnetplane.h @@ -42,6 +42,7 @@ public: protected: virtual bool loadTexture() = 0; virtual bool updateTexture() = 0; + virtual void setUniforms() = 0; void createPlane(); void destroyPlane(); diff --git a/modules/iswa/rendering/dataplane.cpp b/modules/iswa/rendering/dataplane.cpp index f91c280b4a..ddd7e6dc92 100644 --- a/modules/iswa/rendering/dataplane.cpp +++ b/modules/iswa/rendering/dataplane.cpp @@ -173,6 +173,11 @@ bool DataPlane::updateTexture(){ return false; } +void DataPlane::setUniforms(){ + _shader->setUniform("numTextures", (int) _textures.size()); + _shader->setUniform("averageValues", false); +}; + void DataPlane::readHeader(){ if(!_memorybuffer.empty()){ std::stringstream memorystream(_memorybuffer); diff --git a/modules/iswa/rendering/dataplane.h b/modules/iswa/rendering/dataplane.h index a59ad33d82..4d0ee118f3 100644 --- a/modules/iswa/rendering/dataplane.h +++ b/modules/iswa/rendering/dataplane.h @@ -46,6 +46,8 @@ class DataPlane : public CygnetPlane { private: virtual bool loadTexture() override; virtual bool updateTexture() override; + virtual void setUniforms() override; + void readHeader(); float* readData(); void processData( diff --git a/modules/iswa/rendering/kameleonplane.h b/modules/iswa/rendering/kameleonplane.h index 064a17dd12..14738bc6c5 100644 --- a/modules/iswa/rendering/kameleonplane.h +++ b/modules/iswa/rendering/kameleonplane.h @@ -41,6 +41,7 @@ private: virtual bool loadTexture() override; virtual bool updateTexture() override; + virtual void setUniforms() override {}; static int id(); diff --git a/modules/iswa/rendering/textureplane.h b/modules/iswa/rendering/textureplane.h index 274085ba1d..a1334612dd 100644 --- a/modules/iswa/rendering/textureplane.h +++ b/modules/iswa/rendering/textureplane.h @@ -42,6 +42,7 @@ private: virtual bool loadTexture() override; virtual bool updateTexture() override; + virtual void setUniforms() override {}; static int id(); }; diff --git a/modules/iswa/shaders/dataplane_fs.glsl b/modules/iswa/shaders/dataplane_fs.glsl index 70fa633060..e727a583fe 100644 --- a/modules/iswa/shaders/dataplane_fs.glsl +++ b/modules/iswa/shaders/dataplane_fs.glsl @@ -22,8 +22,14 @@ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * ****************************************************************************************/ uniform float time; + uniform sampler2D texture1; +uniform sampler2D textures[10]; uniform sampler2D tf; +uniform sampler2D tfs[10]; + +uniform int numTextures; +uniform bool averageValues; // uniform float background; @@ -36,12 +42,24 @@ in vec4 vs_position; Fragment getFragment() { vec4 position = vs_position; float depth = pscDepth(position); - vec4 diffuse; + vec4 diffuse = vec4(0.0f, 0.0f, 0.0f, 0.0f); + float v; + if(numTextures > 1){ + for(uint i=0; i