summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/runtimerender/Qt3DSOnscreenTextRenderer.cpp14
-rw-r--r--src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp7
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);
}
}
}