summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Määttä <antti.maatta@qt.io>2020-10-12 13:51:44 +0300
committerAntti Määttä <antti.maatta@qt.io>2020-10-14 12:26:25 +0300
commit8e7f57eaf3cd18265af539fcba88f2c8927fd566 (patch)
tree08d10cc932d1ebff1576c84ce63a6ae0aeee0c16
parent111c7f7ceb828caa091f237bd8ab0808e235f00c (diff)
Fix custom materials now showing before reload
Use property name instead of image id, since the id is only available after serialization. Change-Id: Ie00bac32e61607ce481e5eb74a9e61c2d4fd317e Reviewed-by: Kaj Grönholm <kaj.gronholm@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
-rw-r--r--src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp30
-rw-r--r--src/runtime/Qt3DSQmlEngine.cpp2
-rw-r--r--src/runtimerender/Qt3DSRenderCustomMaterialSystem.cpp2
-rw-r--r--src/runtimerender/Qt3DSRenderEffectSystem.cpp2
-rw-r--r--src/runtimerender/Qt3DSRenderUIPLoader.cpp9
-rw-r--r--src/runtimerender/graphobjects/Qt3DSRenderDynamicObject.cpp11
-rw-r--r--src/runtimerender/graphobjects/Qt3DSRenderDynamicObject.h3
7 files changed, 21 insertions, 38 deletions
diff --git a/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp b/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
index b19cd93..7c1700d 100644
--- a/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
+++ b/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
@@ -1362,7 +1362,7 @@ struct SDynamicObjectTranslatorContext : public STranslatorContext
}
bool ApplyChanges(SPresentation &inPresentation, IQt3DSRenderContext &inRenderContext,
SDynamicGraphObject &inObject, Q3DStudio::TElement &element,
- IDynamicObjectSystem &inSystem, int uipVersion)
+ IDynamicObjectSystem &inSystem)
{
bool ret = false;
IStringTable &strTable = element.GetBelongedPresentation()->GetStringTable();
@@ -1399,10 +1399,10 @@ struct SDynamicObjectTranslatorContext : public STranslatorContext
case Q3DStudio::ATTRIBUTETYPE_STRING: {
CRegisteredString theStr =
strTable.HandleToStr(thePropInfo.second->m_StringHandle);
+ SImage *img = theItem.getImage(theDefinition.m_Name);
if (theStr.c_str()[0] == '#') {
- CRegisteredString str = strTable.RegisterStr(theStr.c_str() + 1);
- SImage *img = theItem.getImageById(str);
- if (!img) {
+ CRegisteredString imgId = strTable.RegisterStr(theStr.c_str() + 1);
+ if (!img || img->m_Id != imgId) {
Q3DStudio::TElement *theElem = NULL;
theElem = element.GetBelongedPresentation()->GetApplication()
.GetElementAllocator().FindElementById(theStr);
@@ -1414,7 +1414,7 @@ struct SDynamicObjectTranslatorContext : public STranslatorContext
}
if (img) {
dynObj.SetPropertyValue(
- theDefinition, str.c_str(),
+ theDefinition, theDefinition.m_Name,
inPresentation.m_PresentationDirectory.c_str(),
m_Workspace, inRenderContext.GetStringTable());
} else {
@@ -1423,18 +1423,16 @@ struct SDynamicObjectTranslatorContext : public STranslatorContext
inPresentation.m_PresentationDirectory.c_str(),
m_Workspace, inRenderContext.GetStringTable());
}
- } else if (uipVersion < 7) {
- // Backwards compatibility for older versions
- SImage *img = theItem.getImageByPropertyName(theDefinition.m_Name);
+ } else {
if (img) {
img->m_ImagePath = strTable.RegisterStr(theStr.c_str());
img->m_Flags.SetDirty(true);
+ } else {
+ dynObj.SetPropertyValue(
+ theDefinition, {},
+ inPresentation.m_PresentationDirectory.c_str(),
+ m_Workspace, inRenderContext.GetStringTable());
}
- } else {
- dynObj.SetPropertyValue(
- theDefinition, {},
- inPresentation.m_PresentationDirectory.c_str(),
- m_Workspace, inRenderContext.GetStringTable());
}
} break;
default:
@@ -1466,8 +1464,7 @@ struct SEffectTranslator : public Qt3DSTranslator
SEffect &theItem = *static_cast<SEffect *>(m_RenderObject);
bool dirty = static_cast<SDynamicObjectTranslatorContext *>(m_TranslatorContext)
->ApplyChanges(inPresentation, inRenderContext, theItem, Element(),
- inRenderContext.GetDynamicObjectSystem(),
- runtimePresentation.getUIPVersion());
+ inRenderContext.GetDynamicObjectSystem());
theItem.m_Flags.SetDirty(dirty);
theItem.SetActive(Element().GetActive(), inRenderContext.GetEffectSystem());
}
@@ -1490,8 +1487,7 @@ struct SCustomMaterialTranslator : public Qt3DSTranslator
SCustomMaterial &theItem = *static_cast<SCustomMaterial *>(m_RenderObject);
bool dirty = static_cast<SDynamicObjectTranslatorContext *>(m_TranslatorContext)
->ApplyChanges(inPresentation, inRenderContext, theItem, Element(),
- inRenderContext.GetDynamicObjectSystem(),
- runtimePresentation.getUIPVersion());
+ inRenderContext.GetDynamicObjectSystem());
theItem.m_Flags.SetDirty(dirty);
bool active = m_Element->GetActive();
if (active != theItem.m_Flags.IsActive()) {
diff --git a/src/runtime/Qt3DSQmlEngine.cpp b/src/runtime/Qt3DSQmlEngine.cpp
index 45fafc0..afe07ed 100644
--- a/src/runtime/Qt3DSQmlEngine.cpp
+++ b/src/runtime/Qt3DSQmlEngine.cpp
@@ -1673,7 +1673,7 @@ void CQmlEngineImpl::createMaterials(const QString &subPresId,
if (!regStr.IsValid())
break;
- SImage *img = dynGraphObj->getImageByPropertyName(propDesc.m_Name);
+ SImage *img = dynGraphObj->getImage(propDesc.m_Name);
if (!img) {
img = QT3DS_NEW(allocator, qt3ds::render::SImage)();
img->m_Id = strTable.RegisterStr(
diff --git a/src/runtimerender/Qt3DSRenderCustomMaterialSystem.cpp b/src/runtimerender/Qt3DSRenderCustomMaterialSystem.cpp
index 43a7c17..4e090a9 100644
--- a/src/runtimerender/Qt3DSRenderCustomMaterialSystem.cpp
+++ b/src/runtimerender/Qt3DSRenderCustomMaterialSystem.cpp
@@ -1284,7 +1284,7 @@ struct SMaterialSystem : public ICustomMaterialSystem
== sizeof(NVRenderTexture2DPtr)>::valid_expression();
CRegisteredString *theStrPtr = reinterpret_cast<CRegisteredString *>(inDataPtr);
- SImage *image = inMaterial.getImageById(*theStrPtr);
+ SImage *image = inMaterial.getImage(*theStrPtr);
if (image) {
CRegisteredString strU = strTable.RegisterStr(
QString::fromLatin1(inPropertyName.c_str()) + "TransformU");
diff --git a/src/runtimerender/Qt3DSRenderEffectSystem.cpp b/src/runtimerender/Qt3DSRenderEffectSystem.cpp
index 40f4143..081ad7e 100644
--- a/src/runtimerender/Qt3DSRenderEffectSystem.cpp
+++ b/src/runtimerender/Qt3DSRenderEffectSystem.cpp
@@ -1058,7 +1058,7 @@ struct SEffectSystem : public IEffectSystem
if (inPropertyType == NVRenderShaderDataTypes::NVRenderTexture2DPtr) {
CRegisteredString *theStrPtr = reinterpret_cast<CRegisteredString *>(inDataPtr);
- SImage *image = inEffect.getImageById(*theStrPtr);
+ SImage *image = inEffect.getImage(*theStrPtr);
if (image && image->m_TextureData.m_Texture) {
CRegisteredString strU = m_Context->GetStringTable().RegisterStr(
QString::fromLatin1(inPropertyName.c_str()) + "TransformU");
diff --git a/src/runtimerender/Qt3DSRenderUIPLoader.cpp b/src/runtimerender/Qt3DSRenderUIPLoader.cpp
index 68ee30f..a63b797 100644
--- a/src/runtimerender/Qt3DSRenderUIPLoader.cpp
+++ b/src/runtimerender/Qt3DSRenderUIPLoader.cpp
@@ -1090,19 +1090,16 @@ struct SRenderUIPLoader : public IDOMReferenceResolver
image = static_cast<SImage *>(result->second);
if (image)
inDynamicObject.setImage(theDefinition.m_Name, image);
- SetDynamicObjectProperty(dynObj, theDefinition, ref);
+ SetDynamicObjectProperty(dynObj, theDefinition, theDefinition.m_Name);
} else if (this->m_uipVersion < 7) {
- SImage *img = inDynamicObject.getImageByPropertyName(theDefinition.m_Name);
+ SImage *img = inDynamicObject.getImage(theDefinition.m_Name);
if (!img) {
img = QT3DS_NEW(m_PresentationAllocator, SImage);
- img->m_Id = m_StrTable.RegisterStr(
- QString::fromLatin1(inDynamicObject.m_Id) + QLatin1Char('_')
- + QString::fromLatin1(theDefinition.m_Name));
img->m_HorizontalTilingMode = theDefinition.m_CoordOp;
img->m_VerticalTilingMode = theDefinition.m_CoordOp;
img->m_MagFilter = theDefinition.m_MagFilterOp;
img->m_MinFilter = theDefinition.m_MinFilterOp;
- SetDynamicObjectProperty(dynObj, theDefinition, img->m_Id);
+ SetDynamicObjectProperty(dynObj, theDefinition, theDefinition.m_Name);
}
img->m_ImagePath = theStr;
inDynamicObject.setImage(theDefinition.m_Name, img);
diff --git a/src/runtimerender/graphobjects/Qt3DSRenderDynamicObject.cpp b/src/runtimerender/graphobjects/Qt3DSRenderDynamicObject.cpp
index 0f7b87f..0dede4b 100644
--- a/src/runtimerender/graphobjects/Qt3DSRenderDynamicObject.cpp
+++ b/src/runtimerender/graphobjects/Qt3DSRenderDynamicObject.cpp
@@ -190,18 +190,9 @@ void SDynamicGraphObject::setImage(CRegisteredString propertyName, SImage *image
m_images.insert(propertyName, image);
}
-SImage *SDynamicGraphObject::getImageByPropertyName(CRegisteredString propertyName)
+SImage *SDynamicGraphObject::getImage(CRegisteredString propertyName)
{
if (m_images.contains(propertyName))
return m_images.value(propertyName);
return nullptr;
}
-
-SImage *SDynamicGraphObject::getImageById(CRegisteredString imageId)
-{
- for (auto *img : qAsConst(m_images)) {
- if (img->m_Id == imageId)
- return img;
- }
- return nullptr;
-}
diff --git a/src/runtimerender/graphobjects/Qt3DSRenderDynamicObject.h b/src/runtimerender/graphobjects/Qt3DSRenderDynamicObject.h
index 95ec27e..7211a15 100644
--- a/src/runtimerender/graphobjects/Qt3DSRenderDynamicObject.h
+++ b/src/runtimerender/graphobjects/Qt3DSRenderDynamicObject.h
@@ -126,8 +126,7 @@ namespace render {
SDynamicGraphObject(GraphObjectTypes::Enum inType, SDynamicObject *dynamicObject);
- SImage *getImageById(CRegisteredString imageId);
- SImage *getImageByPropertyName(CRegisteredString propertyName);
+ SImage *getImage(CRegisteredString propertyName);
void setImage(CRegisteredString propertyName, SImage *image);
// Generic method used during serialization