From af8880274cd3034f9dbe3bd9896bf0f047b8b427 Mon Sep 17 00:00:00 2001 From: Michael Nilsson Date: Fri, 18 Mar 2016 13:52:11 -0400 Subject: [PATCH] discard fragment if alpha is 0 in screenspacerenderables --- modules/base/shaders/screnspace_fs.glsl | 3 +++ src/rendering/renderengine.cpp | 8 ++++---- src/rendering/screenspacerenderable.cpp | 11 ++++++----- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/modules/base/shaders/screnspace_fs.glsl b/modules/base/shaders/screnspace_fs.glsl index bba7acc910..45139fda51 100644 --- a/modules/base/shaders/screnspace_fs.glsl +++ b/modules/base/shaders/screnspace_fs.glsl @@ -39,6 +39,9 @@ Fragment getFragment(){ float depth = (1.0 + log(abs(OcclusionDepth) + 1/pow(k, 1.0))/log(k)) / 27.0; frag.color = texture(texture1, vs_st); frag.color.a = (frag.color.a != 0.0f) ? Alpha : frag.color.a; + if(frag.color.a == 0.0f){ + discard; + } frag.depth = depth; return frag; diff --git a/src/rendering/renderengine.cpp b/src/rendering/renderengine.cpp index 9a8889f085..9d7e77b77c 100644 --- a/src/rendering/renderengine.cpp +++ b/src/rendering/renderengine.cpp @@ -207,14 +207,14 @@ bool RenderEngine::initialize() { ghoul::io::TextureReader::ref().addReader(std::make_shared()); - //For testing screenspacerenderables - ssr = std::make_shared("${OPENSPACE_DATA}/test2.jpg"); - registerScreenSpaceRenderable(ssr); - std::shared_ptr ssfb = std::make_shared(); ssfb->addRenderFunction(std::make_shared>([this](){renderInformation();})); ssfb->addRenderFunction(std::make_shared>([this](){ssr->render();})); registerScreenSpaceRenderable(ssfb); + //For testing screenspacerenderables + ssr = std::make_shared("${OPENSPACE_DATA}/test2.jpg"); + registerScreenSpaceRenderable(ssr); + return true; } diff --git a/src/rendering/screenspacerenderable.cpp b/src/rendering/screenspacerenderable.cpp index 309f8f1a30..9ca541d526 100644 --- a/src/rendering/screenspacerenderable.cpp +++ b/src/rendering/screenspacerenderable.cpp @@ -209,11 +209,12 @@ void ScreenSpaceRenderable::draw(glm::mat4 modelTransform){ glEnable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); - _shader->activate(); - _shader->setUniform("OcclusionDepth", occlusionDepth); - _shader->setUniform("Alpha", _alpha); - _shader->setUniform("ModelTransform",modelTransform); - _shader->setUniform("ViewProjectionMatrix", OsEng.renderEngine().camera()->viewProjectionMatrix()); + + _shader->activate(); + _shader->setUniform("OcclusionDepth", occlusionDepth); + _shader->setUniform("Alpha", _alpha); + _shader->setUniform("ModelTransform",modelTransform); + _shader->setUniform("ViewProjectionMatrix", OsEng.renderEngine().camera()->viewProjectionMatrix()); ghoul::opengl::TextureUnit unit; unit.activate(); _texture->bind();