diff --git a/shaders/ABuffer/abufferResolveFragment.glsl b/shaders/ABuffer/abufferResolveFragment.glsl index 75b1a615be..23746f32cb 100644 --- a/shaders/ABuffer/abufferResolveFragment.glsl +++ b/shaders/ABuffer/abufferResolveFragment.glsl @@ -32,6 +32,7 @@ #define SHOWFUNC // #define JITTERING +#define SHOWENLIL #define PSCDEPTH 1 #define ZDEPTH 2 @@ -171,13 +172,15 @@ vec4 calculate_final_color(uint frag_count) { ABufferStruct_t endFrag = fragments[i+1]; int type = int(_type_(startFrag)); - if(type == 0) + if(type == 0) { //blendStep(final_color, _col_(startFrag), stepSize); final_color = blend(final_color, _col_(startFrag)); + } else { + currentVolumeBitmask = currentVolumeBitmask ^ (1 << (type-1)); + } #if MAX_VOLUMES > 0 - currentVolumeBitmask = currentVolumeBitmask ^ type; if(currentVolumeBitmask != 0) { int volID = type -1; float p = 0.0f; diff --git a/shaders/exitpoints.vert b/shaders/exitpoints.vert index f8895ba4b3..a3295d3a6f 100644 --- a/shaders/exitpoints.vert +++ b/shaders/exitpoints.vert @@ -32,7 +32,6 @@ uniform vec4 campos; uniform mat4 camrot; uniform vec2 scaling; uniform vec4 objpos; -uniform float time; out vec3 vPosition; out vec3 worldPosition; diff --git a/src/abuffer/abuffer.cpp b/src/abuffer/abuffer.cpp index 7c2207d6fa..98d4244691 100644 --- a/src/abuffer/abuffer.cpp +++ b/src/abuffer/abuffer.cpp @@ -180,6 +180,7 @@ int ABuffer::addSamplerfile(const std::string& filename) { _samplers.push_back(""); // ID is one more than "actual" position since ID=0 is considered geometry + //return 1 << (_samplers.size()-1); return _samplers.size(); } @@ -306,13 +307,15 @@ std::string ABuffer::openspaceHeaders() { std::string ABuffer::openspaceSamplerCalls() { std::string samplercalls; - for (int i = 1; i < 2; ++i) { + for (int i = 0; i < _samplers.size(); ++i) { auto found1 = _samplers.at(i).find_first_not_of("vec4 "); auto found2 = _samplers.at(i).find_first_of("(",found1); if(found1 != std::string::npos && found2 != std::string::npos) { std::string functionName = _samplers.at(i).substr(found1, found2 - found1); - samplercalls += "if((currentVolumeBitmask & (1 << " + std::to_string(i) + ")) == "+std::to_string(i+1)+") {\n"; + if(i == 0) + samplercalls += "#ifdef SHOWENLIL\n"; + samplercalls += "if((currentVolumeBitmask & (1 << " + std::to_string(i) + ")) == "+std::to_string(1 << i)+") {\n"; samplercalls += " vec4 c = " + functionName + "(final_color,volume_position[" + std::to_string(i) + "]);\n"; // samplercalls += " if(c.a < 0.1) { \n"; // samplercalls += " if( volumeStepSize[" + std::to_string(i) + "] < 16.0*volumeStepSizeOriginal[" + std::to_string(i) + "]) \n"; @@ -326,6 +329,8 @@ std::string ABuffer::openspaceSamplerCalls() { // samplercalls += " blendStep(final_color, c, stepSize);\n"; samplercalls += " volume_position[" + std::to_string(i) + "] += volume_direction[" + std::to_string(i) + "]*volumeStepSize[" + std::to_string(i) + "];\n"; samplercalls += "}\n"; + if(i == 0) + samplercalls += "#endif\n"; } diff --git a/src/rendering/renderablevolumegl.cpp b/src/rendering/renderablevolumegl.cpp index ddbf548138..80c96dd39c 100644 --- a/src/rendering/renderablevolumegl.cpp +++ b/src/rendering/renderablevolumegl.cpp @@ -61,6 +61,7 @@ RenderableVolumeGL::RenderableVolumeGL(const ghoul::Dictionary& dictionary): _transferFunction = nullptr; _transferFunctionFile = nullptr; + _transferFunctionPath = ""; if (dictionary.hasKey("TransferFunction")) { std::string transferFunctionPath = ""; if(dictionary.getValue("TransferFunction", transferFunctionPath)) { @@ -120,22 +121,28 @@ RenderableVolumeGL::~RenderableVolumeGL() { } bool RenderableVolumeGL::initialize() { - assert(_filename != ""); + // assert(_filename != ""); // ------ VOLUME READING ---------------- - _volume = loadVolume(_filename, _hintsDictionary); - _volume->uploadTexture(); - _transferFunction = loadTransferFunction(_transferFunctionPath); - _transferFunction->uploadTexture(); - // TODO: fix volume an transferfunction names - OsEng.renderEngine().abuffer()->addVolume(_volumeName, _volume); - OsEng.renderEngine().abuffer()->addTransferFunction(_transferFunctionName, _transferFunction); - _id = OsEng.renderEngine().abuffer()->addSamplerfile(_samplerFilename); + if(_filename != "") { + _volume = loadVolume(_filename, _hintsDictionary); + _volume->uploadTexture(); + OsEng.renderEngine().abuffer()->addVolume(_volumeName, _volume); + } - auto textureCallback = [this](const ghoul::filesystem::File& file) { - _updateTransferfunction = true; - }; - _transferFunctionFile->setCallback(textureCallback); + if(_transferFunctionPath != "") { + _transferFunction = loadTransferFunction(_transferFunctionPath); + _transferFunction->uploadTexture(); + OsEng.renderEngine().abuffer()->addTransferFunction(_transferFunctionName, _transferFunction); + + auto textureCallback = [this](const ghoul::filesystem::File& file) { + _updateTransferfunction = true; + }; + _transferFunctionFile->setCallback(textureCallback); + } + + // add the sampler and get the ID + _id = OsEng.renderEngine().abuffer()->addSamplerfile(_samplerFilename); _box = new sgct_utils::SGCTBox(1.0f, sgct_utils::SGCTBox::Regular); OsEng.configurationManager().getValue("RaycastProgram", _boxProgram);