mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-01-04 10:40:09 -06:00
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:
@@ -55,7 +55,7 @@ public:
|
||||
|
||||
ABuffer();
|
||||
virtual ~ABuffer();
|
||||
virtual void resolve();
|
||||
virtual void resolve(float blackoutFactor);
|
||||
virtual bool initialize() = 0;
|
||||
virtual bool reinitialize();
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ public:
|
||||
void clear();
|
||||
void preRender();
|
||||
void postRender();
|
||||
void resolve();
|
||||
void resolve(float blackoutFactor);
|
||||
|
||||
std::vector<fragmentData> pixelData();
|
||||
protected:
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
// ================================================================================
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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>();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user