Merge remote-tracking branch 'origin/feature/abuffer' into feature/downloadmanager

Conflicts:
	include/openspace/abuffer/abufferframebuffer.h
	src/abuffer/abuffer.cpp
This commit is contained in:
Alexander Bock
2015-06-22 13:43:57 +02:00
7 changed files with 27 additions and 28 deletions

View File

@@ -55,7 +55,7 @@ public:
ABuffer();
virtual ~ABuffer();
virtual void resolve();
virtual void resolve(float blackoutFactor);
virtual bool initialize() = 0;
virtual bool reinitialize();

View File

@@ -39,7 +39,7 @@ public:
void clear();
void preRender();
void postRender();
void resolve();
void resolve(float blackoutFactor);
std::vector<fragmentData> pixelData();
protected:

View File

@@ -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);
}
// ================================================================================

View File

@@ -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";

View File

@@ -60,6 +60,9 @@ void ABufferFramebuffer::preRender() {
void ABufferFramebuffer::postRender() {
}
void ABufferFramebuffer::resolve(float blackoutFactor) {
}
std::vector<ABuffer::fragmentData> ABufferFramebuffer::pixelData() {
return std::vector<ABuffer::fragmentData>();

View File

@@ -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::fragmentData> 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::fragmentData> ABufferSingleLinked::pixelData()
return d;
}
} // openspace
} // openspace

View File

@@ -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 {