mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-01-05 19:19:39 -06:00
add script to remove screenspacerenderables from renderengine
This commit is contained in:
@@ -180,7 +180,6 @@ private:
|
||||
|
||||
std::vector<ghoul::opengl::ProgramObject*> _programs;
|
||||
std::vector<std::shared_ptr<ScreenSpaceRenderable>> _screenSpaceRenderables;
|
||||
std::vector<std::shared_ptr<ScreenSpaceRenderable>> _deletedScreenSpaceRenderables;
|
||||
|
||||
std::shared_ptr<ghoul::fontrendering::Font> _fontInfo = nullptr;
|
||||
std::shared_ptr<ghoul::fontrendering::Font> _fontDate = nullptr;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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_ptr<ScreenSpaceRe
|
||||
|
||||
if (it != _screenSpaceRenderables.end()) {
|
||||
s->deinitialize();
|
||||
_deletedScreenSpaceRenderables.push_back(s);
|
||||
_screenSpaceRenderables.erase(it);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<ScreenSpaceRenderable> s( ScreenSpaceRenderable::createFromDictionary(d) );
|
||||
|
||||
std::shared_ptr<ScreenSpaceRenderable> 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<ScreenSpaceRenderable> 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
|
||||
|
||||
@@ -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(){}
|
||||
|
||||
Reference in New Issue
Block a user