From a77551aa02a6af6211ef37b386b7e1a0b68107d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Garc=C3=ADa=20Li=C3=B1=C3=A1n?= Date: Tue, 17 Nov 2020 15:21:49 +0100 Subject: [PATCH] Only merge fallback effects if the Effect hasn't been realized yet --- simgear/scene/material/Effect.cxx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/simgear/scene/material/Effect.cxx b/simgear/scene/material/Effect.cxx index 6bf1d12d..ceb9f137 100644 --- a/simgear/scene/material/Effect.cxx +++ b/simgear/scene/material/Effect.cxx @@ -259,8 +259,8 @@ int Effect::getGenerator(Effect::Generator what) const Technique* Effect::chooseTechnique(RenderInfo* info, const std::string &scheme) { for (auto& technique : techniques) { - if (technique->valid(info) == Technique::VALID && - technique->getScheme() == scheme) + if ((technique->valid(info) == Technique::VALID) && + (technique->getScheme() == scheme)) return technique.get(); } return 0; @@ -1473,7 +1473,7 @@ void mergeSchemesFallbacks(Effect *effect, const SGReaderWriterOptions *options) // implementing the scheme if (it == techniques.end()) { ref_ptr fallback = makeEffect(fallback_name, false, options); - if (fallback) { + if (fallback.valid()) { SGPropertyNode *new_root = new SGPropertyNode; mergePropertyTrees(new_root, effect->root, fallback->root); effect->root = new_root; @@ -1489,10 +1489,12 @@ static std::mutex realizeTechniques_lock; bool Effect::realizeTechniques(const SGReaderWriterOptions* options) { std::lock_guard g(realizeTechniques_lock); - mergeSchemesFallbacks(this, options); if (_isRealized) return true; + + mergeSchemesFallbacks(this, options); + PropertyList tniqList = root->getChildren("technique"); for (PropertyList::iterator itr = tniqList.begin(), e = tniqList.end(); itr != e;