diff --git a/include/openspace/rendering/renderengine.h b/include/openspace/rendering/renderengine.h index 7596db9732..efe5611cf5 100644 --- a/include/openspace/rendering/renderengine.h +++ b/include/openspace/rendering/renderengine.h @@ -78,6 +78,8 @@ public: void setGlobalOpacity(float opacity); void setSGCTRenderStatistics(bool visible); + + void setDisableRenderingOnMaster(bool enabled); /** * Returns the Lua library that contains all Lua functions available to affect the @@ -120,6 +122,8 @@ private: bool _visualizeABuffer; ABufferVisualizer* _visualizer; + + bool _disableMasterRendering = false; }; } // namespace openspace diff --git a/include/openspace/util/constants.h b/include/openspace/util/constants.h index 700906f60f..c82272d426 100644 --- a/include/openspace/util/constants.h +++ b/include/openspace/util/constants.h @@ -55,6 +55,7 @@ namespace configurationmanager { const std::string keyLogLevel = "Logging.LogLevel"; const std::string keyLogImmediateFlush = "Logging.ImmediateFlush"; const std::string keyLogs = "Logging.Logs"; + const std::string keyDisableMasterRendering = "DisableRenderingOnMaster"; } // namespace configurationmanager namespace scenegraph { diff --git a/src/engine/openspaceengine.cpp b/src/engine/openspaceengine.cpp index 067dfaff12..9b5e38ca15 100644 --- a/src/engine/openspaceengine.cpp +++ b/src/engine/openspaceengine.cpp @@ -288,6 +288,11 @@ bool OpenSpaceEngine::initialize() { _scriptEngine->writeDocumentation(luaDocumentationFile, luaDocumentationType); } + bool disableMasterRendering = false; + configurationManager()->getValue( + constants::configurationmanager::keyDisableMasterRendering, disableMasterRendering); + _renderEngine->setDisableRenderingOnMaster(disableMasterRendering); + // Load scenegraph SceneGraph* sceneGraph = new SceneGraph; diff --git a/src/rendering/renderengine.cpp b/src/rendering/renderengine.cpp index 6645a5e79b..4112c01dd6 100644 --- a/src/rendering/renderengine.cpp +++ b/src/rendering/renderengine.cpp @@ -470,24 +470,27 @@ namespace openspace { //Is this really necessary to store? @JK _mainCamera->setViewProjectionMatrix(projectionMatrix * viewMatrix); - // render the scene starting from the root node - if (!_visualizeABuffer) { - _abuffer->preRender(); - _sceneGraph->render({ - *_mainCamera, - psc(), - _doPerformanceMeasurements - }); - _abuffer->postRender(); + // We only want to skip the rendering if we are the master and we want to + // disable the rendering for the master + if (!(OsEng.isMaster() && _disableMasterRendering)) { + if (!_visualizeABuffer) { + _abuffer->preRender(); + _sceneGraph->render({ + *_mainCamera, + psc(), + _doPerformanceMeasurements + }); + _abuffer->postRender(); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - _abuffer->resolve(); - glDisable(GL_BLEND); - } - else { - _visualizer->render(); - } + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + _abuffer->resolve(); + glDisable(GL_BLEND); + } + else { + _visualizer->render(); + } + } #if 1 @@ -923,4 +926,8 @@ void RenderEngine::setSGCTRenderStatistics(bool visible) { _sgctRenderStatisticsVisible = visible; } +void RenderEngine::setDisableRenderingOnMaster(bool enabled) { + _disableMasterRendering = enabled; +} + }// namespace openspace