summaryrefslogtreecommitdiffstats
path: root/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp')
-rw-r--r--src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp b/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
index 7c1700d..6fcb6bc 100644
--- a/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
+++ b/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
@@ -410,9 +410,20 @@ struct SRuntimePropertyParser
CRegisteredString theTemp;
ParseProperty<Qt3DSRenderDirtyFlags::Unknown>(theTemp);
CRegisteredString theNewStr = theTemp;
+
if (outValue.c_str() != theNewStr.c_str()) {
+ auto &strTable = m_RenderContext.GetStringTable();
SetDirty<TDirtyType>();
- outValue = theNewStr;
+ auto handle = strTable.findDynamicHandle(outValue.c_str());
+ auto newHandle = strTable.findDynamicHandle(theNewStr.c_str());
+ // If the new string is dynamic string, increment the ref count.
+ // Otherwise use the statically registered string directly.
+ if (newHandle)
+ outValue = strTable.HandleToStr(strTable.getDynamicHandle(theNewStr.c_str()));
+ else
+ outValue = theNewStr;
+ // Release ref count from the old string, can call even if the handle is 0.
+ strTable.releaseDynamicHandle(handle);
return true;
}
return false;