From cc0dfdf5d138649ba0d025a53de43b038c05389a Mon Sep 17 00:00:00 2001 From: Matthew Territo Date: Thu, 11 Aug 2016 20:56:18 -0600 Subject: [PATCH] Add simple ability to cycle through FPS (instead of Frametime) with t / Shift+t --- include/openspace/rendering/renderengine.h | 10 ++++ scripts/common.lua | 3 + src/rendering/renderengine.cpp | 64 ++++++++++++++++++++-- src/rendering/renderengine_lua.inl | 20 ++++++- 4 files changed, 90 insertions(+), 7 deletions(-) diff --git a/include/openspace/rendering/renderengine.h b/include/openspace/rendering/renderengine.h index 647f516c3e..d33d3ede7f 100644 --- a/include/openspace/rendering/renderengine.h +++ b/include/openspace/rendering/renderengine.h @@ -68,8 +68,15 @@ public: Post }; + enum class FrametimeType { + DtTimeAvg = 0, + FPS, + FPSAvg + }; + static const std::string KeyFontMono; static const std::string KeyFontLight; + static const std::vector FrametimeTypes; RenderEngine(); ~RenderEngine(); @@ -97,6 +104,7 @@ public: void takeScreenshot(); void toggleInfoText(bool b); + void toggleFrametimeType(int t); // Performance measurements void setPerformanceMeasurements(bool performanceMeasurements); @@ -199,6 +207,8 @@ private: ghoul::Dictionary _resolveData; ScreenLog* _log; + FrametimeType _frametimeType; + bool _showInfo; bool _showLog; bool _takeScreenshot; diff --git a/scripts/common.lua b/scripts/common.lua index 45646532c8..bbca08a0f9 100644 --- a/scripts/common.lua +++ b/scripts/common.lua @@ -11,6 +11,9 @@ helper.setCommonKeys = function() openspace.bindKey("F2", "openspace.setPerformanceMeasurement(true)") openspace.bindKey("F3", "openspace.setPerformanceMeasurement(false)") + openspace.bindKey("t", "openspace.toggleFrametimeType(1)") + openspace.bindKey("Shift+t", "openspace.toggleFrametimeType(0)") + openspace.bindKey("ESC", "openspace.toggleShutdown()") openspace.bindKey("PRINT_SCREEN", "openspace.takeScreenshot()") diff --git a/src/rendering/renderengine.cpp b/src/rendering/renderengine.cpp index e3abd6bf57..06b4d17eb5 100644 --- a/src/rendering/renderengine.cpp +++ b/src/rendering/renderengine.cpp @@ -106,7 +106,12 @@ namespace openspace { const std::string RenderEngine::KeyFontMono = "Mono"; const std::string RenderEngine::KeyFontLight = "Light"; - +const std::vector RenderEngine::FrametimeTypes({ + RenderEngine::FrametimeType::DtTimeAvg, + RenderEngine::FrametimeType::FPS, + RenderEngine::FrametimeType::FPSAvg +}); + RenderEngine::RenderEngine() : _mainCamera(nullptr) , _sceneGraph(nullptr) @@ -121,6 +126,7 @@ RenderEngine::RenderEngine() , _fadeDuration(2.f) , _currentFadeTime(0.f) , _fadeDirection(0) + , _frametimeType(FrametimeType::DtTimeAvg) // , _sgctRenderStatisticsVisible(false) { _onScreenInformation = { @@ -460,6 +466,21 @@ void RenderEngine::toggleInfoText(bool b) { _showInfo = b; } +void RenderEngine::toggleFrametimeType(int t) { + std::vector::const_iterator it = std::find( + FrametimeTypes.begin(), FrametimeTypes.end(), _frametimeType); + + if (!t && it == FrametimeTypes.begin()) + it = FrametimeTypes.end(); + + t > 0 ? ++it : --it; + + if (t && it == FrametimeTypes.end()) + it = FrametimeTypes.begin(); + + _frametimeType = *it; +} + Scene* RenderEngine::scene() { // TODO custom assert (ticket #5) assert(_sceneGraph); @@ -713,6 +734,12 @@ scripting::LuaLibrary RenderEngine::luaLibrary() { "bool", "Toggles the showing of render information on-screen text" }, + { + "toggleFrametimeType", + &luascriptfunctions::toggleFrametimeType, + "int", + "Toggle showing FPS or Average Frametime in heads up info" + }, { "setPerformanceMeasurement", &luascriptfunctions::setPerformanceMeasurement, @@ -1250,11 +1277,36 @@ void RenderEngine::renderInformation() { Time::ref().deltaTime() ); - RenderFontCr(*_fontInfo, - penPosition, - "Avg. Frametime: %.5f", - OsEng.windowWrapper().averageDeltaTime() - ); + switch (_frametimeType) { + case FrametimeType::DtTimeAvg: + RenderFontCr(*_fontInfo, + penPosition, + "Avg. Frametime: %.5f", + OsEng.windowWrapper().averageDeltaTime() + ); + break; + case FrametimeType::FPS: + RenderFontCr(*_fontInfo, + penPosition, + "FPS: %3.2f", + 1.0 / OsEng.windowWrapper().deltaTime() + ); + break; + case FrametimeType::FPSAvg: + RenderFontCr(*_fontInfo, + penPosition, + "Avg. FPS: %3.2f", + 1.0 / OsEng.windowWrapper().averageDeltaTime() + ); + break; + default: + RenderFontCr(*_fontInfo, + penPosition, + "Avg. Frametime: %.5f", + OsEng.windowWrapper().averageDeltaTime() + ); + break; + } #ifdef OPENSPACE_MODULE_NEWHORIZONS_ENABLED bool hasNewHorizons = scene()->sceneGraphNode("NewHorizons"); diff --git a/src/rendering/renderengine_lua.inl b/src/rendering/renderengine_lua.inl index 43cbe1d4bf..c52df95ca4 100644 --- a/src/rendering/renderengine_lua.inl +++ b/src/rendering/renderengine_lua.inl @@ -81,7 +81,7 @@ int setNAaSamples(lua_State* L) { /** * \ingroup LuaScripts * visualizeABuffer(bool): -* Toggle the visualization of the ABuffer +* Toggle heads-up info display on master node */ int showRenderInformation(lua_State* L) { int nArguments = lua_gettop(L); @@ -98,6 +98,24 @@ int showRenderInformation(lua_State* L) { return 0; } +/** +* \ingroup LuaScripts +* toggleFramerateType(bool): +* Cycle through showing FPS or Average Frametime in heads up info +*/ +int toggleFrametimeType(lua_State* L) { + int nArguments = lua_gettop(L); + if (nArguments != 1) + return luaL_error(L, "Expected %i arguments, got %i", 1, nArguments); + + const int type = lua_type(L, -1); + if (type != LUA_TNUMBER) + return luaL_error(L, "Expected argument of type 'number'"); + int t = lua_tonumber(L, -1); + OsEng.renderEngine().toggleFrametimeType(t); + return 0; +} + /** * \ingroup LuaScripts * visualizeABuffer(bool):