diff options
-rw-r--r-- | src/runtimerender/Qt3DSOnscreenTextRenderer.cpp | 14 | ||||
-rw-r--r-- | src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp | 7 |
2 files changed, 11 insertions, 10 deletions
diff --git a/src/runtimerender/Qt3DSOnscreenTextRenderer.cpp b/src/runtimerender/Qt3DSOnscreenTextRenderer.cpp index 4b74c51..2612b7c 100644 --- a/src/runtimerender/Qt3DSOnscreenTextRenderer.cpp +++ b/src/runtimerender/Qt3DSOnscreenTextRenderer.cpp @@ -292,10 +292,8 @@ public: SRenderTextureAtlasDetails RenderText(const STextRenderInfo &inText) override { - qt3ds::foundation::IStringTable &theStringTable(m_RenderContext->GetStringTable()); - - const wchar_t *wText = theStringTable.GetWideStr(inText.m_Text); - QT3DSU32 length = (QT3DSU32)wcslen(wText); + const QString wText = QString::fromUtf8(inText.m_Text); + QT3DSU32 length = QT3DSU32(wText.length()); if (length) { STextAtlasFont *pFont = m_TextFont; @@ -307,13 +305,13 @@ public: // we construct triangles here // which means character count x 6 vertices x 5 floats QT3DSF32 *vertexData = - (QT3DSF32 *)QT3DS_ALLOC(m_Foundation.getAllocator(), - length * 6 * 5 * sizeof(QT3DSF32), - "Qt3DSOnscreenTextRenderer"); + static_cast<QT3DSF32 *>(QT3DS_ALLOC(m_Foundation.getAllocator(), + length * 6 * 5 * sizeof(QT3DSF32), + "Qt3DSOnscreenTextRenderer")); QT3DSF32 *bufPtr = vertexData; if (vertexData) { for (size_t i = 0; i < length; ++i) { - pEntry = &pFont->m_AtlasEntries.find(wText[i])->second; + pEntry = &pFont->m_AtlasEntries.find(wText[uint(i)].unicode())->second; if (pEntry) { x1 = advance + pEntry->m_xOffset; diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp b/src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp index 0b3f665..c40ff55 100644 --- a/src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp +++ b/src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp @@ -1851,9 +1851,11 @@ namespace render { ITextTextureAtlas *theTextureAtlas = m_qt3dsContext.GetTextureAtlas(); QSize theWindow = m_qt3dsContext.GetWindowDimensions(); - const wchar_t *wText = m_StringTable->GetWideStr(text); + // Use dynamic strings to avoid memory leakage + QByteArray theText(text); + CStringHandle textHandle = m_StringTable->getDynamicHandle(theText); STextRenderInfo theInfo; - theInfo.m_Text = m_StringTable->RegisterStr(wText); + theInfo.m_Text = m_StringTable->HandleToStr(textHandle); theInfo.m_FontSize = 20; // text scale 2% of screen we don't scale Y though because it becomes unreadable theInfo.m_ScaleX = (theWindow.width() / 100.0f) * 1.5f / (theInfo.m_FontSize); @@ -1894,6 +1896,7 @@ namespace render { QT3DS_FREE(m_Context->GetAllocator(), theRenderTextDetails.first.m_Vertices.begin()); } + m_StringTable->releaseDynamicHandle(textHandle); } } } |