From 67dd887e522e0ecd83012563ae15673f2ea12cd0 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Fri, 24 Aug 2018 03:15:55 -0600 Subject: [PATCH] Render text informing of ongoing shutdown (#696) --- include/openspace/rendering/renderengine.h | 1 + src/engine/openspaceengine.cpp | 6 ++++++ src/rendering/renderengine.cpp | 17 +++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/include/openspace/rendering/renderengine.h b/include/openspace/rendering/renderengine.h index c8c6376fa3..d162ddfdca 100644 --- a/include/openspace/rendering/renderengine.h +++ b/include/openspace/rendering/renderengine.h @@ -93,6 +93,7 @@ public: bool mouseActivationCallback(const glm::dvec2& mousePosition) const; void renderOverlays(const ShutdownInformation& shutdownInfo); + void renderEndscreen(); void postDraw(); // Performance measurements diff --git a/src/engine/openspaceengine.cpp b/src/engine/openspaceengine.cpp index 306ef7faef..bdf767eb6b 100644 --- a/src/engine/openspaceengine.cpp +++ b/src/engine/openspaceengine.cpp @@ -760,6 +760,11 @@ void OpenSpaceEngine::loadSingleAsset(const std::string& assetPath) { void OpenSpaceEngine::deinitialize() { LTRACE("OpenSpaceEngine::deinitialize(begin)"); + // We want to render an image informing the user that we are shutting down + _renderEngine->renderEndscreen(); + + _engine->_windowWrapper->swapBuffer(); + for (const std::function& func : _engine->_moduleCallbacks.deinitializeGL) { func(); } @@ -1235,6 +1240,7 @@ void OpenSpaceEngine::postSynchronizationPreDraw() { if (_shutdown.inShutdown) { if (_shutdown.timer <= 0.f) { _windowWrapper->terminate(); + return; } _shutdown.timer -= static_cast(_windowWrapper->averageDeltaTime()); } diff --git a/src/rendering/renderengine.cpp b/src/rendering/renderengine.cpp index a30034ec0e..0f34eb873f 100644 --- a/src/rendering/renderengine.cpp +++ b/src/rendering/renderengine.cpp @@ -639,6 +639,23 @@ void RenderEngine::renderOverlays(const ShutdownInformation& shutdownInfo) { } } +void RenderEngine::renderEndscreen() { + glClearColor(0.f, 0.f, 0.f, 0.25f); + glClear(GL_COLOR_BUFFER_BIT); + + using FR = ghoul::fontrendering::FontRenderer; + using BBox = FR::BoundingBoxInformation; + BBox size = FR::defaultRenderer().boundingBox( + *_fontDate, + "Shutting down" + ); + glm::vec2 penPosition = glm::vec2( + fontResolution().x / 2 - size.boundingBox.x / 2, + fontResolution().y / 2- size.boundingBox.y / 2 + ); + RenderFont(*_fontDate, penPosition, "Shutting down"); +} + void RenderEngine::renderShutdownInformation(float timer, float fullTime) { timer = std::max(timer, 0.f);