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,