mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-05-01 08:19:51 -05:00
ScreenSpaceRenderables can be creates through scripts, ScreenSpaceRenderable is now a factory
This commit is contained in:
@@ -380,7 +380,7 @@ void RenderEngine::postSynchronizationPreDraw() {
|
||||
_deletedScreenSpaceRenderables.clear();
|
||||
|
||||
for (auto screenspacerenderable : _screenSpaceRenderables) {
|
||||
screenspacerenderable->update();
|
||||
screenspacerenderable->update();
|
||||
}
|
||||
//Allow focus node to update camera (enables camera-following)
|
||||
//FIX LATER: THIS CAUSES MASTER NODE TO BE ONE FRAME AHEAD OF SLAVES
|
||||
@@ -646,6 +646,12 @@ scripting::ScriptEngine::LuaLibrary RenderEngine::luaLibrary() {
|
||||
"",
|
||||
true
|
||||
},
|
||||
{
|
||||
"registerScreenSpaceRenderable",
|
||||
&luascriptfunctions::registerScreenSpaceRenderable,
|
||||
"table",
|
||||
"Will create a ScreenSpaceRenderable from a lua Table and register it in the RenderEngine"
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -133,6 +133,29 @@ int fadeOut(lua_State* L) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int registerScreenSpaceRenderable(lua_State* L) {
|
||||
static const std::string _loggerCat = "registerScreenSpaceRenderable";
|
||||
using ghoul::lua::errorLocation;
|
||||
|
||||
int nArguments = lua_gettop(L);
|
||||
if (nArguments != 1)
|
||||
return luaL_error(L, "Expected %i arguments, got %i", 1, nArguments);
|
||||
|
||||
ghoul::Dictionary d;
|
||||
try {
|
||||
ghoul::lua::luaDictionaryFromState(L, d);
|
||||
}
|
||||
catch (const ghoul::lua::LuaFormatException& e) {
|
||||
LERROR(e.what());
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::shared_ptr<ScreenSpaceRenderable> s( ScreenSpaceRenderable::createFromDictionary(d) );
|
||||
OsEng.renderEngine().registerScreenSpaceRenderable(s);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
} // namespace luascriptfunctions
|
||||
|
||||
}// namespace openspace
|
||||
|
||||
@@ -23,8 +23,37 @@
|
||||
****************************************************************************************/
|
||||
#include <openspace/engine/openspaceengine.h>
|
||||
#include <openspace/rendering/screenspacerenderable.h>
|
||||
#include <openspace/util/factorymanager.h>
|
||||
|
||||
namespace {
|
||||
const std::string _loggerCat = "ScreenSpaceRenderable";
|
||||
const std::string KeyType = "Type";
|
||||
}
|
||||
|
||||
namespace openspace {
|
||||
|
||||
ScreenSpaceRenderable* ScreenSpaceRenderable::createFromDictionary(const ghoul::Dictionary& dictionary) {
|
||||
|
||||
std::string renderableType;
|
||||
bool success = dictionary.getValue(KeyType, renderableType);
|
||||
|
||||
if (!success) {
|
||||
LERROR("ScreenSpaceRenderable did not have key '" << KeyType << "'");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
ghoul::TemplateFactory<ScreenSpaceRenderable>* factory
|
||||
= FactoryManager::ref().factory<ScreenSpaceRenderable>();
|
||||
ScreenSpaceRenderable* result = factory->create(renderableType, dictionary);
|
||||
if (result == nullptr) {
|
||||
LERROR("Failed to create a ScreenSpaceRenderable object of type '" << renderableType << "'");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
ScreenSpaceRenderable::ScreenSpaceRenderable()
|
||||
:_enabled("enabled", "Is Enabled", true)
|
||||
,_useFlatScreen("flatScreen", "Flat Screen", true)
|
||||
|
||||
Reference in New Issue
Block a user