From f5833aa2d4a6339f9eb6184392f8323c4875435d Mon Sep 17 00:00:00 2001 From: Lynix Date: Sat, 21 Jun 2014 15:38:24 +0200 Subject: [PATCH] Improved rendertechnique fallback (will no longer loop) Former-commit-id: 1aeb737432de1d2a8f205e547404b3f140967a16 --- src/Nazara/Graphics/Scene.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/Nazara/Graphics/Scene.cpp b/src/Nazara/Graphics/Scene.cpp index 8c01521d1..9f8509677 100644 --- a/src/Nazara/Graphics/Scene.cpp +++ b/src/Nazara/Graphics/Scene.cpp @@ -33,7 +33,7 @@ struct NzSceneImpl NzSceneRoot root; NzAbstractViewer* viewer = nullptr; bool backgroundEnabled = true; - bool update; + bool update = false; float frameTime; float updateTime; int renderTechniqueRanking; @@ -99,8 +99,18 @@ void NzScene::Draw() catch (const std::exception& e) { NzString oldName = m_impl->renderTechnique->GetName(); - m_impl->renderTechnique.reset(NzRenderTechniques::GetByRanking(m_impl->renderTechniqueRanking-1, &m_impl->renderTechniqueRanking)); - NazaraError("Render technique \"" + oldName + "\" failed, switched to \"" + m_impl->renderTechnique->GetName() + '"'); + + if (m_impl->renderTechniqueRanking > 0) + { + m_impl->renderTechnique.reset(NzRenderTechniques::GetByRanking(m_impl->renderTechniqueRanking-1, &m_impl->renderTechniqueRanking)); + NazaraError("Render technique \"" + oldName + "\" failed, fallback to \"" + m_impl->renderTechnique->GetName() + '"'); + } + else + { + NzErrorFlags errFlags(nzErrorFlag_ThrowException); + NazaraError("Render technique \"" + oldName + "\" failed and no fallback is available"); + } + return; } }