From 453fbe300e666a60d6ab16322fea47f2baa55a31 Mon Sep 17 00:00:00 2001 From: Sebastian Piwell Date: Mon, 4 Apr 2016 15:40:45 -0400 Subject: [PATCH] Remove screenspacerenderables in any order --- include/openspace/rendering/renderengine.h | 1 + include/openspace/rendering/screenspacerenderable.h | 1 - modules/base/rendering/screenspaceframebuffer.cpp | 5 +---- modules/base/rendering/screenspaceimage.cpp | 5 +---- src/rendering/renderengine.cpp | 4 ++++ src/rendering/screenspacerenderable.cpp | 3 +-- 6 files changed, 8 insertions(+), 11 deletions(-) diff --git a/include/openspace/rendering/renderengine.h b/include/openspace/rendering/renderengine.h index 3cb6d91a3e..4c82c4c650 100644 --- a/include/openspace/rendering/renderengine.h +++ b/include/openspace/rendering/renderengine.h @@ -180,6 +180,7 @@ private: std::vector _programs; std::vector> _screenSpaceRenderables; + std::vector> _deletedScreenSpaceRenderables; std::shared_ptr _fontInfo = nullptr; std::shared_ptr _fontDate = nullptr; diff --git a/include/openspace/rendering/screenspacerenderable.h b/include/openspace/rendering/screenspacerenderable.h index 828060689f..8c17780d4c 100644 --- a/include/openspace/rendering/screenspacerenderable.h +++ b/include/openspace/rendering/screenspacerenderable.h @@ -120,7 +120,6 @@ protected: glm::vec2 _originalViewportSize; float _radius; - bool _toDelete; }; } // namespace openspace #endif // __SCREENSPACERENDERABLE_H__ \ No newline at end of file diff --git a/modules/base/rendering/screenspaceframebuffer.cpp b/modules/base/rendering/screenspaceframebuffer.cpp index fe9e16db1f..b794c3c5ab 100644 --- a/modules/base/rendering/screenspaceframebuffer.cpp +++ b/modules/base/rendering/screenspaceframebuffer.cpp @@ -116,10 +116,7 @@ void ScreenSpaceFramebuffer::render(){ } } -void ScreenSpaceFramebuffer::update(){ - if(_toDelete) - OsEng.renderEngine().unregisterScreenSpaceRenderable(name()); -} +void ScreenSpaceFramebuffer::update(){} bool ScreenSpaceFramebuffer::isReady() const{ bool ready = true; diff --git a/modules/base/rendering/screenspaceimage.cpp b/modules/base/rendering/screenspaceimage.cpp index 386c41630f..6377f95403 100644 --- a/modules/base/rendering/screenspaceimage.cpp +++ b/modules/base/rendering/screenspaceimage.cpp @@ -87,10 +87,7 @@ void ScreenSpaceImage::render(){ draw(modelTransform); } -void ScreenSpaceImage::update(){ - if(_toDelete) - OsEng.renderEngine().unregisterScreenSpaceRenderable(name()); -} +void ScreenSpaceImage::update(){} bool ScreenSpaceImage::isReady() const{ diff --git a/src/rendering/renderengine.cpp b/src/rendering/renderengine.cpp index 7d321729a8..6eaf48071f 100644 --- a/src/rendering/renderengine.cpp +++ b/src/rendering/renderengine.cpp @@ -384,6 +384,9 @@ void RenderEngine::postSynchronizationPreDraw() { } } + if(!_deletedScreenSpaceRenderables.empty()) + _deletedScreenSpaceRenderables.clear(); + for (auto screenspacerenderable : _screenSpaceRenderables) { screenspacerenderable->update(); } @@ -1153,6 +1156,7 @@ void RenderEngine::unregisterScreenSpaceRenderable(std::shared_ptrdeinitialize(); + _deletedScreenSpaceRenderables.push_back(s); _screenSpaceRenderables.erase(it); } } diff --git a/src/rendering/screenspacerenderable.cpp b/src/rendering/screenspacerenderable.cpp index bd2b5d291f..e27e47d924 100644 --- a/src/rendering/screenspacerenderable.cpp +++ b/src/rendering/screenspacerenderable.cpp @@ -41,7 +41,6 @@ ScreenSpaceRenderable::ScreenSpaceRenderable() ,_fragmentPath("${MODULE_BASE}/shaders/screnspace_fs.glsl") ,_texture(nullptr) ,_shader(nullptr) - ,_toDelete(false) { addProperty(_enabled); addProperty(_useFlatScreen); @@ -74,7 +73,7 @@ ScreenSpaceRenderable::ScreenSpaceRenderable() useEuclideanCoordinates(_useFlatScreen.value()); }); - _delete.onChange([this](){_toDelete=true;}); + _delete.onChange([this](){OsEng.renderEngine().unregisterScreenSpaceRenderable(name());}); } ScreenSpaceRenderable::~ScreenSpaceRenderable(){}