diff --git a/modules/iswa/rendering/cygnetplane.h b/modules/iswa/rendering/cygnetplane.h index 0f9712671e..845f552221 100644 --- a/modules/iswa/rendering/cygnetplane.h +++ b/modules/iswa/rendering/cygnetplane.h @@ -38,7 +38,7 @@ public: virtual bool initialize(); virtual bool deinitialize(); - bool isReady(); + bool isReady() override; virtual void render(); virtual void update(); diff --git a/modules/iswa/rendering/iswacontainer.cpp b/modules/iswa/rendering/iswacontainer.cpp index 2f9839aa71..cab4ae2e32 100644 --- a/modules/iswa/rendering/iswacontainer.cpp +++ b/modules/iswa/rendering/iswacontainer.cpp @@ -65,7 +65,7 @@ bool ISWAContainer::isReady() const { return true; } void ISWAContainer::render(const RenderData& data){ for(auto iSWACygnet : _iSWACygnets){ - if(iSWACygnet->enabled()){ + if(iSWACygnet->enabled() && iSWACygnet->isReady()){ iSWACygnet->render(); } } diff --git a/modules/iswa/rendering/iswacygnet.h b/modules/iswa/rendering/iswacygnet.h index 0ffddd378c..190a665516 100644 --- a/modules/iswa/rendering/iswacygnet.h +++ b/modules/iswa/rendering/iswacygnet.h @@ -51,6 +51,7 @@ public: virtual void update(); bool enabled(){return _enabled.value();} + virtual bool isReady() = 0; protected: void setPscUniforms(ghoul::opengl::ProgramObject* program, const Camera* camera, const PowerScaledCoordinate& position); diff --git a/modules/iswa/rendering/screenspacecygnet.cpp b/modules/iswa/rendering/screenspacecygnet.cpp index 2d0607b492..67e21aff3b 100644 --- a/modules/iswa/rendering/screenspacecygnet.cpp +++ b/modules/iswa/rendering/screenspacecygnet.cpp @@ -65,12 +65,13 @@ bool ScreenSpaceCygnet::initialize(){ createPlane(); createShaders(); - loadTexture(); + updateTexture(); // Setting spherical/euclidean onchange handler _useFlatScreen.onChange([this](){ useEuclideanCoordinates(_useFlatScreen.value()); }); + return isReady(); } @@ -96,6 +97,9 @@ bool ScreenSpaceCygnet::deinitialize(){ } void ScreenSpaceCygnet::render(){ + + if(!isReady()) return; + glm::mat4 rotation = rotationMatrix(); glm::mat4 translation = translationMatrix(); glm::mat4 scale = scaleMatrix(); @@ -129,7 +133,12 @@ void ScreenSpaceCygnet::updateTexture(){ } bool ScreenSpaceCygnet::isReady() const{ - return true; + bool ready = true; + if (!_shader) + ready &= false; + if(!_texture) + ready &= false; + return ready; } void ScreenSpaceCygnet::loadTexture() { diff --git a/modules/iswa/rendering/textureplane.cpp b/modules/iswa/rendering/textureplane.cpp index ae0643d28b..c19e3746d2 100644 --- a/modules/iswa/rendering/textureplane.cpp +++ b/modules/iswa/rendering/textureplane.cpp @@ -52,8 +52,7 @@ TexturePlane::TexturePlane() _fileExtension = ISWAManager::ref().fileExtension(_cygnetId.value()); _path = "${OPENSPACE_DATA}/"+ name()+_fileExtension; - updateTexture(); - + _cygnetId.onChange([this](){ _fileExtension = ISWAManager::ref().fileExtension(_cygnetId.value()); _path = "${OPENSPACE_DATA}/"+ name()+_fileExtension; @@ -71,9 +70,9 @@ bool TexturePlane::initialize(){ _pscOffset = glm::vec4(0, 0, 0, 1); CygnetPlane::initialize(); - - loadTexture(); - + + updateTexture(); + return isReady(); } diff --git a/tests/test_screenspaceimage.inl b/tests/test_screenspaceimage.inl index 90f19ae5ed..a20f661ba2 100644 --- a/tests/test_screenspaceimage.inl +++ b/tests/test_screenspaceimage.inl @@ -58,7 +58,6 @@ protected: TEST_F(ScreenSpaceRenderableTest, initialize){ bool isReady = _ssr.isReady(); - _ssr._texturePath; ASSERT_TRUE(!isReady) << "ScreenSpaceImage is ready before initialize"; // cannot test initialize, crashes at createplane becasue of opengl functions. needs mocking