diff options
Diffstat (limited to 'src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp')
-rw-r--r-- | src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp | 13 |
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; |