diff --git a/include/openspace/abuffer/abuffer.h b/include/openspace/abuffer/abuffer.h index 86de8676d7..6252ffc06c 100644 --- a/include/openspace/abuffer/abuffer.h +++ b/include/openspace/abuffer/abuffer.h @@ -55,7 +55,7 @@ public: ABuffer(); virtual ~ABuffer(); - virtual void resolve(); + virtual void resolve(float blackoutFactor); virtual bool initialize() = 0; virtual bool reinitialize(); diff --git a/include/openspace/abuffer/abufferframebuffer.h b/include/openspace/abuffer/abufferframebuffer.h index f84e01cd2b..13b3f18f30 100644 --- a/include/openspace/abuffer/abufferframebuffer.h +++ b/include/openspace/abuffer/abufferframebuffer.h @@ -39,7 +39,7 @@ public: void clear(); void preRender(); void postRender(); - void resolve(); + void resolve(float blackoutFactor); std::vector pixelData(); protected: diff --git a/shaders/ABuffer/abufferResolveFragment.glsl b/shaders/ABuffer/abufferResolveFragment.glsl index d9e45834f9..dc6fedcb07 100644 --- a/shaders/ABuffer/abufferResolveFragment.glsl +++ b/shaders/ABuffer/abufferResolveFragment.glsl @@ -56,6 +56,8 @@ const float stepSize = 0.01; const float samplingRate = 1.0; uniform float ALPHA_LIMIT = 0.99; +uniform float blackoutFactor = 0.0; + // Math defintions #define M_E 2.7182818284590452354 @@ -307,7 +309,7 @@ void main() { out_color = vec4(texCoord,0.0,1.0); int frag_count = build_local_fragments_list(); sort_fragments_list(frag_count); - out_color = calculate_final_color(frag_count); + out_color = blackoutFactor * calculate_final_color(frag_count); } // ================================================================================ diff --git a/src/abuffer/abuffer.cpp b/src/abuffer/abuffer.cpp index 40944fcfd9..afadda50fa 100644 --- a/src/abuffer/abuffer.cpp +++ b/src/abuffer/abuffer.cpp @@ -55,20 +55,17 @@ namespace openspace { ABuffer::ABuffer() : _validShader(false) , _resolveShader(nullptr) - , _volumeStepFactor(0.0f) + , _volumeStepFactor(0.f) { updateDimensions(); } ABuffer::~ABuffer() { - - if(_resolveShader) - delete _resolveShader; + delete _resolveShader; - for(auto file: _samplerFiles) { + for (auto file: _samplerFiles) delete file; - } } bool ABuffer::initializeABuffer() { @@ -88,13 +85,14 @@ bool ABuffer::initializeABuffer() { if (!_resolveShader) return false; _resolveShader->setProgramObjectCallback(shaderCallback); + // Remove explicit callback and use programobject isDirty instead ---abock // ============================ // GEOMETRY (quad) // ============================ const GLfloat size = 1.0f; - const GLfloat vertex_data[] = { // square of two triangles (sigh) - // x y z w s t + const GLfloat vertex_data[] = { + // x y s t -size, -size, 0.0f, 1.0f, size, size, 0.0f, 1.0f, -size, size, 0.0f, 1.0f, @@ -114,14 +112,13 @@ bool ABuffer::initializeABuffer() { } bool ABuffer::reinitialize() { - // set the total resolution for all viewports updateDimensions(); return reinitializeInternal(); } -void ABuffer::resolve() { - if( ! _validShader) { +void ABuffer::resolve(float blackoutFactor) { + if (!_validShader) { generateShaderSource(); updateShader(); _validShader = true; @@ -131,13 +128,14 @@ void ABuffer::resolve() { return; _resolveShader->activate(); + _resolveShader->setUniform("blackoutFactor", blackoutFactor); int startAt = 0; - for(int i = 0; i < _volumes.size(); ++i) { + for (int i = 0; i < _volumes.size(); ++i) { glActiveTexture(GL_TEXTURE0 + i); _volumes.at(i).second->bind(); startAt = i + 1; } - for(int i = 0; i < _transferFunctions.size(); ++i) { + for (int i = 0; i < _transferFunctions.size(); ++i) { glActiveTexture(GL_TEXTURE0 + startAt + i); _transferFunctions.at(i).second->bind(); } @@ -204,8 +202,7 @@ bool ABuffer::updateShader() { } void ABuffer::generateShaderSource() { - - for(int i = 0; i < _samplerFiles.size(); ++i) { + for (int i = 0; i < _samplerFiles.size(); ++i) { std::string line, source = ""; std::ifstream samplerFile(_samplerFiles.at(i)->path()); if(samplerFile.is_open()) { @@ -225,7 +222,6 @@ void ABuffer::generateShaderSource() { } void ABuffer::openspaceHeaders() { - std::ofstream f(absPath(generatedHeadersPath)); f << "#define MAX_VOLUMES " << std::to_string(_samplers.size()) << "\n" << "#define MAX_TF " << _transferFunctions.size() << "\n"; diff --git a/src/abuffer/abufferframebuffer.cpp b/src/abuffer/abufferframebuffer.cpp index 3dae2f4876..d8c8ca997c 100644 --- a/src/abuffer/abufferframebuffer.cpp +++ b/src/abuffer/abufferframebuffer.cpp @@ -60,6 +60,9 @@ void ABufferFramebuffer::preRender() { void ABufferFramebuffer::postRender() { } + +void ABufferFramebuffer::resolve(float blackoutFactor) { +} std::vector ABufferFramebuffer::pixelData() { return std::vector(); diff --git a/src/abuffer/abuffersinglelinked.cpp b/src/abuffer/abuffersinglelinked.cpp index 89750f6ced..834f54ad07 100644 --- a/src/abuffer/abuffersinglelinked.cpp +++ b/src/abuffer/abuffersinglelinked.cpp @@ -56,11 +56,11 @@ ABufferSingleLinked::ABufferSingleLinked() {} ABufferSingleLinked::~ABufferSingleLinked() { - glDeleteTextures(1,&_anchorPointerTexture); - glDeleteTextures(1,&_fragmentTexture); - glDeleteBuffers(1,&_anchorPointerTextureInitializer); - glDeleteBuffers(1,&_atomicCounterBuffer); - glDeleteBuffers(1,&_anchorPointerTextureInitializer); + glDeleteTextures(1, &_anchorPointerTexture); + glDeleteTextures(1, &_fragmentTexture); + glDeleteBuffers(1, &_anchorPointerTextureInitializer); + glDeleteBuffers(1, &_atomicCounterBuffer); + glDeleteBuffers(1, &_anchorPointerTextureInitializer); } bool ABufferSingleLinked::initialize() { @@ -123,7 +123,6 @@ void ABufferSingleLinked::clear() { } void ABufferSingleLinked::preRender() { - // Bind head-pointer image for read-write glBindBufferBase(GL_ATOMIC_COUNTER_BUFFER, 0, _atomicCounterBuffer); glBindImageTexture(0, _anchorPointerTexture, 0, GL_FALSE, 0, GL_READ_WRITE, GL_R32UI); @@ -135,7 +134,6 @@ void ABufferSingleLinked::postRender() { } std::vector ABufferSingleLinked::pixelData() { - unsigned int* anchorTexture = new unsigned int[_totalPixels]; unsigned int* fragmentBuffer = new unsigned int[_totalPixels*MAX_LAYERS*4]; @@ -201,4 +199,4 @@ std::vector ABufferSingleLinked::pixelData() return d; } -} // openspace \ No newline at end of file +} // openspace diff --git a/src/rendering/renderengine.cpp b/src/rendering/renderengine.cpp index 1284f8ff91..111d5b95ff 100644 --- a/src/rendering/renderengine.cpp +++ b/src/rendering/renderengine.cpp @@ -389,7 +389,7 @@ void RenderEngine::render(const glm::mat4 &projectionMatrix, const glm::mat4 &vi glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - _abuffer->resolve(); + _abuffer->resolve(_globalBlackOutFactor); glDisable(GL_BLEND); } else {