diff options
author | Antti Määttä <antti.maatta@qt.io> | 2020-10-14 09:35:16 +0300 |
---|---|---|
committer | Antti Määttä <antti.maatta@qt.io> | 2020-10-16 07:15:41 +0300 |
commit | d874a3f85ae92d2b9e8378f21be85586545d9ac6 (patch) | |
tree | c952b0680a11f9a19732ba8657029722b59e6a8c | |
parent | 627a8f04403c9c1651dbb5d9843d86ccd9dee0d1 (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.cpp | 23 |
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)); + } } } |