# HG changeset patch # User sam # Date 1735186847 -25200 # Node ID 99d5b42cf32d67880087c4e8707edc9ee282f807 # Parent 5a56f8ac328b063806675c4c38d583ea13976f6d did: simplify text rendering API diff -r 5a56f8ac328b -r 99d5b42cf32d semicongine/rendering.nim --- a/semicongine/rendering.nim Mon Dec 23 00:32:07 2024 +0700 +++ b/semicongine/rendering.nim Thu Dec 26 11:20:47 2024 +0700 @@ -114,7 +114,7 @@ # shader related types DescriptorSetData*[T: object] = object data*: T - vk: array[INFLIGHTFRAMES.int, VkDescriptorSet] + vk*: array[INFLIGHTFRAMES.int, VkDescriptorSet] Pipeline*[TShader] = object vk: VkPipeline diff -r 5a56f8ac328b -r 99d5b42cf32d semicongine/text.nim --- a/semicongine/text.nim Mon Dec 23 00:32:07 2024 +0700 +++ b/semicongine/text.nim Thu Dec 26 11:20:47 2024 +0700 @@ -116,8 +116,11 @@ include ./text/font -func initTextBuffer*[MaxGlyphs: static int]( - font: Font[MaxGlyphs], bufferSize: int, baseScale = 1'f32 +proc initTextBuffer*[MaxGlyphs: static int]( + font: Font[MaxGlyphs], + bufferSize: int, + renderdata: var RenderData, + baseScale = 1'f32, ): TextBuffer[MaxGlyphs] = result.cursor = 0 result.font = font @@ -127,6 +130,7 @@ result.color.data.setLen(bufferSize) result.glyphIndex.data.setLen(bufferSize) result.texts.setLen(bufferSize) # waste a lot of memory? + assignBuffers(renderdata, result) iterator splitLines(text: seq[Rune]): seq[Rune] = var current = newSeq[Rune]() diff -r 5a56f8ac328b -r 99d5b42cf32d semicongine/text/font.nim --- a/semicongine/text/font.nim Mon Dec 23 00:32:07 2024 +0700 +++ b/semicongine/text/font.nim Thu Dec 26 11:20:47 2024 +0700 @@ -177,6 +177,7 @@ ) proc upload*(font: Font, renderdata: var RenderData) = + assert font.descriptorSet.vk.allIt(not it.Valid), "Font was alread uploaded" assignBuffers(renderdata, font.descriptorSet) uploadImages(renderdata, font.descriptorSet) diff -r 5a56f8ac328b -r 99d5b42cf32d tests/test_text.nim --- a/tests/test_text.nim Mon Dec 23 00:32:07 2024 +0700 +++ b/tests/test_text.nim Thu Dec 26 11:20:47 2024 +0700 @@ -21,8 +21,7 @@ var pipeline = createPipeline[GlyphShader[MAX_CODEPOINTS]]( renderPass = vulkan.swapchain.renderPass ) - var textbuffer = font.initTextBuffer(1000, baseScale = 0.1) - assignBuffers(renderdata, textbuffer) + var textbuffer = font.initTextBuffer(1000, renderdata, baseScale = 0.1) font.upload(renderdata) font.addToPipeline(renderdata, pipeline) @@ -70,13 +69,9 @@ font2.addToPipeline(renderdata, pipeline) font3.addToPipeline(renderdata, pipeline) - var textbuffer1 = font1.initTextBuffer(10, baseScale = 0.1) - var textbuffer2 = font2.initTextBuffer(10, baseScale = 0.1) - var textbuffer3 = font3.initTextBuffer(10, baseScale = 0.1) - - assignBuffers(renderdata, textbuffer1) - assignBuffers(renderdata, textbuffer2) - assignBuffers(renderdata, textbuffer3) + var textbuffer1 = font1.initTextBuffer(10, renderdata, baseScale = 0.1) + var textbuffer2 = font2.initTextBuffer(10, renderdata, baseScale = 0.1) + var textbuffer3 = font3.initTextBuffer(10, renderdata, baseScale = 0.1) var p = 0 let l1 = textbuffer1.add($(p + 0), vec3(0.3, 0.5), capacity = 5) @@ -130,8 +125,7 @@ font.upload(renderdata) font.addToPipeline(renderdata, pipeline) - var textbuffer = font.initTextBuffer(1000, baseScale = 0.1) - assignBuffers(renderdata, textbuffer) + var textbuffer = font.initTextBuffer(1000, renderdata, baseScale = 0.1) discard textbuffer.add("Anchor at center", vec3(0, 0), anchor = vec2(0, 0)) discard textbuffer.add("Anchor at top left`", vec3(-1, 1), anchor = vec2(-1, 1)) @@ -184,8 +178,7 @@ font.upload(renderdata) font.addToPipeline(renderdata, pipeline) - var textbuffer = font.initTextBuffer(3000, baseScale = 0.1) - assignBuffers(renderdata, textbuffer) + var textbuffer = font.initTextBuffer(3000, renderdata, baseScale = 0.1) for i in 0 ..< 1000: discard textbuffer.add(