summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Määttä <antti.maatta@qt.io>2020-10-14 09:35:16 +0300
committerAntti Määttä <antti.maatta@qt.io>2020-10-16 07:15:41 +0300
commitd874a3f85ae92d2b9e8378f21be85586545d9ac6 (patch)
treec952b0680a11f9a19732ba8657029722b59e6a8c
parent627a8f04403c9c1651dbb5d9843d86ccd9dee0d1 (diff)
Fix assert when loading qml streamer
Fix assert and memory leak when registering qml streamer if it has already been registered. Change-Id: I6af73abb2c9806622dfde4a75a67a08b3391b2a5 Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
-rw-r--r--src/engine/Qt3DSRenderRuntimeBinding.cpp23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/engine/Qt3DSRenderRuntimeBinding.cpp b/src/engine/Qt3DSRenderRuntimeBinding.cpp
index db58ed4..f314f18 100644
--- a/src/engine/Qt3DSRenderRuntimeBinding.cpp
+++ b/src/engine/Qt3DSRenderRuntimeBinding.cpp
@@ -1219,16 +1219,19 @@ struct Qt3DSRenderSceneManager : public Q3DStudio::ISceneManager,
void LoadQmlStreamerPlugin(const char *inAssetIDString) override
{
- qt3ds::render::IOffscreenRenderer *theOffscreenRenderer =
- QT3DS_NEW(m_Context->GetAllocator(),
- Q3DSQmlRender)(*m_Context->m_Context, inAssetIDString);
- if (theOffscreenRenderer) {
- qt3ds::foundation::CRegisteredString theAssetString =
- m_Context->m_CoreContext->GetStringTable().RegisterStr(inAssetIDString);
- m_Context->m_Context->GetOffscreenRenderManager().RegisterOffscreenRenderer(
- SOffscreenRendererKey(theAssetString), *theOffscreenRenderer);
-
- m_RenderPlugins.push_back(make_pair(theAssetString, 0));
+ qt3ds::foundation::CRegisteredString theAssetString =
+ m_Context->m_CoreContext->GetStringTable().RegisterStr(inAssetIDString);
+ auto &orm = m_Context->m_Context->GetOffscreenRenderManager();
+ const SOffscreenRendererKey offscreenRendererKey(theAssetString);
+ if (!orm.GetOffscreenRenderer(offscreenRendererKey)) {
+ qt3ds::render::IOffscreenRenderer *theOffscreenRenderer =
+ QT3DS_NEW(m_Context->GetAllocator(),
+ Q3DSQmlRender)(*m_Context->m_Context, inAssetIDString);
+ if (theOffscreenRenderer) {
+ orm.RegisterOffscreenRenderer(
+ SOffscreenRendererKey(theAssetString), *theOffscreenRenderer);
+ m_RenderPlugins.push_back(make_pair(theAssetString, 0));
+ }
}
}