diff --git a/include/openspace/rendering/renderengine.h b/include/openspace/rendering/renderengine.h index 6dc1879568..da62938f01 100644 --- a/include/openspace/rendering/renderengine.h +++ b/include/openspace/rendering/renderengine.h @@ -180,7 +180,6 @@ private: std::vector _programs; std::vector> _screenSpaceRenderables; - std::vector> _deletedScreenSpaceRenderables; std::shared_ptr _fontInfo = nullptr; std::shared_ptr _fontDate = nullptr; diff --git a/modules/iswa/rendering/screenspacecygnet.cpp b/modules/iswa/rendering/screenspacecygnet.cpp index 8cc5447715..fedad895ea 100644 --- a/modules/iswa/rendering/screenspacecygnet.cpp +++ b/modules/iswa/rendering/screenspacecygnet.cpp @@ -75,7 +75,7 @@ bool ScreenSpaceCygnet::initialize(){ } bool ScreenSpaceCygnet::deinitialize(){ - OsEng.gui()._iSWAproperty.unregisterProperties(name()); + OsEng.gui()._screenSpaceProperty.unregisterProperties(name()); glDeleteVertexArrays(1, &_quad); _quad = 0; diff --git a/src/rendering/renderengine.cpp b/src/rendering/renderengine.cpp index c1b79fd039..b416763bcf 100644 --- a/src/rendering/renderengine.cpp +++ b/src/rendering/renderengine.cpp @@ -375,9 +375,6 @@ void RenderEngine::postSynchronizationPreDraw() { program->rebuildFromFile(); } } - - if(!_deletedScreenSpaceRenderables.empty()) - _deletedScreenSpaceRenderables.clear(); for (auto screenspacerenderable : _screenSpaceRenderables) { screenspacerenderable->update(); @@ -652,6 +649,12 @@ scripting::ScriptEngine::LuaLibrary RenderEngine::luaLibrary() { "table", "Will create a ScreenSpaceRenderable from a lua Table and register it in the RenderEngine" }, + { + "unregisterScreenSpaceRenderable", + &luascriptfunctions::unregisterScreenSpaceRenderable, + "string", + "Given a ScreenSpaceRenderable name this script will remove it from the renderengine" + }, }, }; } @@ -1154,7 +1157,6 @@ void RenderEngine::unregisterScreenSpaceRenderable(std::shared_ptrdeinitialize(); - _deletedScreenSpaceRenderables.push_back(s); _screenSpaceRenderables.erase(it); } } diff --git a/src/rendering/renderengine_lua.inl b/src/rendering/renderengine_lua.inl index b11388dc43..783ab6bef6 100644 --- a/src/rendering/renderengine_lua.inl +++ b/src/rendering/renderengine_lua.inl @@ -138,8 +138,8 @@ int registerScreenSpaceRenderable(lua_State* L) { using ghoul::lua::errorLocation; int nArguments = lua_gettop(L); - if (nArguments != 1) - return luaL_error(L, "Expected %i arguments, got %i", 1, nArguments); + if (nArguments != 1) + return luaL_error(L, "Expected %i arguments, got %i", 1, nArguments); ghoul::Dictionary d; try { @@ -149,13 +149,34 @@ int registerScreenSpaceRenderable(lua_State* L) { LERROR(e.what()); return 0; } - - std::shared_ptr s( ScreenSpaceRenderable::createFromDictionary(d) ); + + std::shared_ptr s( ScreenSpaceRenderable::createFromDictionary(d) ); OsEng.renderEngine().registerScreenSpaceRenderable(s); return 1; } +int unregisterScreenSpaceRenderable(lua_State* L) { + static const std::string _loggerCat = "unregisterScreenSpaceRenderable"; + using ghoul::lua::errorLocation; + + int nArguments = lua_gettop(L); + if (nArguments != 1) + return luaL_error(L, "Expected %i arguments, got %i", 1, nArguments); + + std::string name = luaL_checkstring(L, -1); + + std::shared_ptr s = OsEng.renderEngine().screenSpaceRenderable(name); + if (!s) { + LERROR(errorLocation(L) << "Could not find ScreenSpaceRenderable '" << name << "'"); + return 0; + } + + OsEng.renderEngine().unregisterScreenSpaceRenderable(s); + + return 1; +} + } // namespace luascriptfunctions }// namespace openspace diff --git a/src/rendering/screenspacerenderable.cpp b/src/rendering/screenspacerenderable.cpp index 6016f060fc..2a3030f6b2 100644 --- a/src/rendering/screenspacerenderable.cpp +++ b/src/rendering/screenspacerenderable.cpp @@ -101,7 +101,10 @@ ScreenSpaceRenderable::ScreenSpaceRenderable() useEuclideanCoordinates(_useFlatScreen.value()); }); - _delete.onChange([this](){OsEng.renderEngine().unregisterScreenSpaceRenderable(name());}); + _delete.onChange([this](){ + std::string script = "openspace.unregisterScreenSpaceRenderable('" + name() + "');"; + OsEng.scriptEngine().queueScript(script); + }); } ScreenSpaceRenderable::~ScreenSpaceRenderable(){}