diff options
author | Antti Määttä <antti.maatta@qt.io> | 2019-05-29 15:32:36 +0300 |
---|---|---|
committer | Antti Määttä <antti.maatta@qt.io> | 2019-05-29 15:37:36 +0300 |
commit | 3f85997352569286e2e26c43406ea6697d352dad (patch) | |
tree | 1e860ed2d04256e62767daaae6383a0349f0bf27 | |
parent | cab4a8b3d8840829790d6fa782a8d589dbb6d75e (diff) |
Fix crash in editor when using qmlstreams
Do not use filename as initial presentation id. It might be used by
another presentation as an id like in this case. Instead use __initial as
initial presentation id. In addition to asset map, also ordered assets
need to update the presentation key.
Task-number: QT3DS-3383
Change-Id: I40249f8fc496372637fd0018f43c2b29d986842b
Reviewed-by: Jari Karppinen <jari.karppinen@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
-rw-r--r-- | src/Runtime/Source/runtime/Qt3DSApplication.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/Runtime/Source/runtime/Qt3DSApplication.cpp b/src/Runtime/Source/runtime/Qt3DSApplication.cpp index 20e3fd57..df2f00fa 100644 --- a/src/Runtime/Source/runtime/Qt3DSApplication.cpp +++ b/src/Runtime/Source/runtime/Qt3DSApplication.cpp @@ -688,6 +688,7 @@ struct SApp : public IApplication , m_createSuccessful(false) , mRefCount(0) { + m_PresentationId.append("__initial"); m_AudioPlayer.SetApplication(*this); eastl::string tempStr(inAppDir); CFileTools::NormalizePath(tempStr); @@ -734,15 +735,22 @@ struct SApp : public IApplication if (oldId == id) return; + CRegisteredString idStr = m_CoreFactory->GetStringTable().RegisterStr(id); // Update id key in m_AssetMap TIdAssetMap::iterator iter = m_AssetMap.find(m_CoreFactory->GetStringTable().RegisterStr(oldId)); if (iter != m_AssetMap.end() && iter->second->getType() == AssetValueTypes::Presentation) { - CRegisteredString idStr = m_CoreFactory->GetStringTable().RegisterStr(id); m_AssetMap.insert(eastl::make_pair(idStr, iter->second)); m_AssetMap.erase(iter); } + for (unsigned i = 0; i < m_OrderedAssets.size(); i++) { + auto &asset = m_OrderedAssets[i]; + if (oldId == asset.first.c_str()) { + asset.first = idStr; + break; + } + } m_PresentationId.assign(qPrintable(id)); } @@ -1489,12 +1497,12 @@ struct SApp : public IApplication m_variantConfig.setVariantList(variantList); bool retval = false; if (extension.comparei("uip") == 0) { - m_PresentationId.assign(filename.c_str()); + m_PresentationId.assign("__initial"); eastl::string relativePath = "./"; relativePath.append(filename); relativePath.append("."); relativePath.append("uip"); - RegisterAsset(SPresentationAsset(RegisterStr(filename.c_str()), + RegisterAsset(SPresentationAsset(RegisterStr(m_PresentationId.c_str()), RegisterStr(relativePath.c_str()))); m_AppLoadContext = IAppLoadContext::CreateXMLLoadContext(*this, ""); |