add script to remove screenspacerenderables from renderengine

This commit is contained in:
Michael Nilsson
2016-05-03 13:30:22 -04:00
parent d6b5976298
commit c34fa48c73
5 changed files with 36 additions and 11 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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(){}