Mercurial > games > semicongine
changeset 1412:e10b230c70bc
fix: still another bug in the cleanup of old buffers for text rendering
author | sam <sam@basx.dev> |
---|---|
date | Thu, 26 Dec 2024 19:41:10 +0700 |
parents | 5273bb68cf85 |
children | bc6782c0edd6 |
files | semicongine/text.nim |
diffstat | 1 files changed, 9 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/semicongine/text.nim Thu Dec 26 16:06:22 2024 +0700 +++ b/semicongine/text.nim Thu Dec 26 19:41:10 2024 +0700 @@ -202,9 +202,11 @@ cursorPos.x = origin.x + (maxWidth - lineWidths[lineI]) / aratio var bufferOffset = textbuffer.texts[textI].bufferOffset - for i in 0 ..< textbuffer.texts[textI].capacity: - assert bufferOffset < - textbuffer.texts[textI].bufferOffset + textbuffer.texts[textI].capacity + let bufferEnd = + textbuffer.texts[textI].bufferOffset + textbuffer.texts[textI].capacity + var i = 0 + while i < textbuffer.texts[textI].capacity and bufferOffset < bufferEnd: + # for i in 0 ..< textbuffer.texts[textI].capacity: if i < text.len: if text[i] == Rune('\n'): inc lineI @@ -244,12 +246,13 @@ cursorPos.x + textbuffer.font.kerning.getOrDefault((text[i], text[i + 1]), 0) * globalScale / aratio - else: + if i >= text.len or text[i].isWhiteSpace(): textbuffer.position[bufferOffset] = vec3() textbuffer.scale[bufferOffset] = 0 textbuffer.color[bufferOffset] = vec4() textbuffer.glyphIndex[bufferOffset] = 0 inc bufferOffset + inc i proc updateGlyphData*(textbuffer: var TextBuffer) = for i in 0 ..< textbuffer.texts.len: @@ -262,9 +265,9 @@ textbuffer.cursor = 0 textbuffer.texts.setLen(0) -proc refresh*(textbuffer: var TextBuffer) = +proc refresh*(textbuffer: var TextBuffer, flush = false) = textbuffer.updateGlyphData() - textbuffer.updateAllGPUBuffers(flush = true) + textbuffer.updateAllGPUBuffers(flush = flush) proc add*( textbuffer: var TextBuffer,