summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Määttä <antti.maatta@qt.io>2019-05-29 15:32:36 +0300
committerAntti Määttä <antti.maatta@qt.io>2019-05-29 15:37:36 +0300
commit3f85997352569286e2e26c43406ea6697d352dad (patch)
tree1e860ed2d04256e62767daaae6383a0349f0bf27
parentcab4a8b3d8840829790d6fa782a8d589dbb6d75e (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.cpp14
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, "");