diff --git a/data/scene/default.scene b/data/scene/default.scene index e9af8f7989..49386d5ceb 100644 --- a/data/scene/default.scene +++ b/data/scene/default.scene @@ -30,7 +30,7 @@ function postInitialization() openspace.printInfo("Done setting default values") - openspace.iswa.addCygnet("0,Data,1"); + openspace.iswa.addCygnet("0,Data"); --openspace.iswa.addCygnet("-1,Data,1"); --openspace.iswa.addCygnet("-2,Data,1"); --openspace.iswa.addCygnet("-3,Data,1"); diff --git a/modules/iswa/ext/base64/base64.cpp b/modules/iswa/ext/base64/base64.cpp new file mode 100644 index 0000000000..071b05cd38 --- /dev/null +++ b/modules/iswa/ext/base64/base64.cpp @@ -0,0 +1,123 @@ +/* + base64.cpp and base64.h + + Copyright (C) 2004-2008 René Nyffenegger + + This source code is provided 'as-is', without any express or implied + warranty. In no event will the author be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this source code must not be misrepresented; you must not + claim that you wrote the original source code. If you use this source code + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original source code. + + 3. This notice may not be removed or altered from any source distribution. + + René Nyffenegger rene.nyffenegger@adp-gmbh.ch + +*/ + +#include "base64.h" +#include + +static const std::string base64_chars = + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789+/"; + + +static inline bool is_base64(unsigned char c) { + return (isalnum(c) || (c == '+') || (c == '/')); +} + +std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len) { + std::string ret; + int i = 0; + int j = 0; + unsigned char char_array_3[3]; + unsigned char char_array_4[4]; + + while (in_len--) { + char_array_3[i++] = *(bytes_to_encode++); + if (i == 3) { + char_array_4[0] = (char_array_3[0] & 0xfc) >> 2; + char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4); + char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6); + char_array_4[3] = char_array_3[2] & 0x3f; + + for(i = 0; (i <4) ; i++) + ret += base64_chars[char_array_4[i]]; + i = 0; + } + } + + if (i) + { + for(j = i; j < 3; j++) + char_array_3[j] = '\0'; + + char_array_4[0] = (char_array_3[0] & 0xfc) >> 2; + char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4); + char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6); + char_array_4[3] = char_array_3[2] & 0x3f; + + for (j = 0; (j < i + 1); j++) + ret += base64_chars[char_array_4[j]]; + + while((i++ < 3)) + ret += '='; + + } + + return ret; + +} + +std::string base64_decode(std::string const& encoded_string) { + int in_len = encoded_string.size(); + int i = 0; + int j = 0; + int in_ = 0; + unsigned char char_array_4[4], char_array_3[3]; + std::string ret; + + while (in_len-- && ( encoded_string[in_] != '=') && is_base64(encoded_string[in_])) { + char_array_4[i++] = encoded_string[in_]; in_++; + if (i ==4) { + for (i = 0; i <4; i++) + char_array_4[i] = base64_chars.find(char_array_4[i]); + + char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4); + char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2); + char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3]; + + for (i = 0; (i < 3); i++) + ret += char_array_3[i]; + i = 0; + } + } + + if (i) { + for (j = i; j <4; j++) + char_array_4[j] = 0; + + for (j = 0; j <4; j++) + char_array_4[j] = base64_chars.find(char_array_4[j]); + + char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4); + char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2); + char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3]; + + for (j = 0; (j < i - 1); j++) ret += char_array_3[j]; + } + + return ret; +} \ No newline at end of file diff --git a/modules/iswa/ext/base64/base64.h b/modules/iswa/ext/base64/base64.h new file mode 100644 index 0000000000..ceb13579ce --- /dev/null +++ b/modules/iswa/ext/base64/base64.h @@ -0,0 +1,4 @@ +#include + +std::string base64_encode(unsigned char const* , unsigned int len); +std::string base64_decode(std::string const& s); \ No newline at end of file diff --git a/modules/iswa/rendering/dataplane.cpp b/modules/iswa/rendering/dataplane.cpp index 17d2152033..fa1b34c8ed 100644 --- a/modules/iswa/rendering/dataplane.cpp +++ b/modules/iswa/rendering/dataplane.cpp @@ -203,7 +203,6 @@ bool DataPlane::readyToRender(){ void DataPlane::setUniformAndTextures(){ std::vector selectedOptions = _dataOptions.value(); int activeTextures = selectedOptions.size(); - int activeTransferfunctions = _transferFunctions.size(); ghoul::opengl::TextureUnit txUnits[10]; @@ -221,10 +220,15 @@ void DataPlane::setUniformAndTextures(){ } } + if(activeTextures > 0){ + if(selectedOptions.back()>=activeTransferfunctions) + activeTransferfunctions = 1; + } + ghoul::opengl::TextureUnit tfUnits[10]; j = 0; - if((activeTransferfunctions == 1) && (_textures.size() != _transferFunctions.size())){ + if((activeTransferfunctions == 1)){ tfUnits[0].activate(); _transferFunctions[0]->bind(); _shader->setUniform( @@ -233,6 +237,12 @@ void DataPlane::setUniformAndTextures(){ ); }else{ for(int option : selectedOptions){ + // std::cout << option << std::endl; + // if(option >= activeTransferfunctions){ + // // LWARNING("No transfer function for this value."); + // break; + // } + if(_transferFunctions[option]){ tfUnits[j].activate(); _transferFunctions[option]->bind(); diff --git a/modules/iswa/rendering/datasphere.cpp b/modules/iswa/rendering/datasphere.cpp index 442fb6d32f..0521405168 100644 --- a/modules/iswa/rendering/datasphere.cpp +++ b/modules/iswa/rendering/datasphere.cpp @@ -28,6 +28,11 @@ #include #include + +namespace { + const std::string _loggerCat = "DataSphere"; +} + namespace openspace { DataSphere::DataSphere(const ghoul::Dictionary& dictionary) @@ -212,7 +217,6 @@ bool DataSphere::readyToRender(){ void DataSphere::setUniformAndTextures(){ std::vector selectedOptions = _dataOptions.value(); int activeTextures = selectedOptions.size(); - int activeTransferfunctions = _transferFunctions.size(); ghoul::opengl::TextureUnit txUnits[10]; @@ -230,10 +234,15 @@ void DataSphere::setUniformAndTextures(){ } } + if(activeTextures > 0){ + if(selectedOptions.back()>=activeTransferfunctions) + activeTransferfunctions = 1; + } + ghoul::opengl::TextureUnit tfUnits[10]; j = 0; - if((activeTransferfunctions == 1) && (_textures.size() != _transferFunctions.size())){ + if((activeTransferfunctions == 1)){ tfUnits[0].activate(); _transferFunctions[0]->bind(); _shader->setUniform( @@ -242,6 +251,12 @@ void DataSphere::setUniformAndTextures(){ ); }else{ for(int option : selectedOptions){ + // std::cout << option << std::endl; + // if(option >= activeTransferfunctions){ + // // LWARNING("No transfer function for this value."); + // break; + // } + if(_transferFunctions[option]){ tfUnits[j].activate(); _transferFunctions[option]->bind();