Mercurial > games > semicongine
diff tests/test_text.nim @ 1399:dde74be11b49
did: continue a lot on glyph renderer
author | sam <sam@basx.dev> |
---|---|
date | Sun, 15 Dec 2024 00:21:12 +0700 |
parents | f7bf7a5cc1e7 |
children | 20602878744e |
line wrap: on
line diff
--- a/tests/test_text.nim Sat Dec 14 17:17:51 2024 +0700 +++ b/tests/test_text.nim Sun Dec 15 00:21:12 2024 +0700 @@ -16,60 +16,28 @@ type EMPTY = object -const N_GLYPHS = 200 +const MAX_GLYPHS = 200 proc test_01_static_label_new(time: float32) = # var font = loadFont("Overhaul.ttf", lineHeightPixels = 160) - var font = loadFont("DejaVuSans.ttf", lineHeightPixels = 160) + var font = loadFont[MAX_GLYPHS]("DejaVuSans.ttf", lineHeightPixels = 160) var renderdata = initRenderData() var pipeline = - createPipeline[GlyphShader[N_GLYPHS]](renderPass = vulkan.swapchain.renderPass) - var (ds, glyphtable) = glyphDescriptorSet(font, N_GLYPHS) - var glyphs = Glyphs( - position: asGPUArray( - [ - vec3(-1, 0, 0), - vec3(-0.6, 0, 0), - vec3(-0.3, 0, 0), - vec3(0, 0, 0), - vec3(0.3, 0, 0), - vec3(0.6, 0, 0), - ], - VertexBufferMapped, - ), - scale: asGPUArray([1'f32, 1'f32, 1'f32, 1'f32, 1'f32, 1'f32], VertexBufferMapped), - color: asGPUArray( - [ - vec4(1, 1, 0, 1), - vec4(0, 0, 1, 1), - vec4(1, 1, 1, 1), - vec4(1, 1, 0, 1), - vec4(0, 0, 1, 1), - vec4(1, 1, 1, 1), - ], - VertexBufferMapped, - ), - glyphIndex: asGPUArray( - [ - glyphtable[Rune('a')], - glyphtable[Rune('l')], - glyphtable[Rune('i')], - glyphtable[Rune('g')], - glyphtable[Rune('x')], - glyphtable[Rune('x')], - ], - VertexBufferMapped, - ), - ) + createPipeline[GlyphShader[MAX_GLYPHS]](renderPass = vulkan.swapchain.renderPass) + var glyphs = initGlyphs(1000) assignBuffers(renderdata, glyphs) - assignBuffers(renderdata, ds) - uploadImages(renderdata, ds) - initDescriptorSet(renderdata, pipeline.layout(0), ds) + assignBuffers(renderdata, font.descriptorSet) + uploadImages(renderdata, font.descriptorSet) + initDescriptorSet(renderdata, pipeline.layout(0), font.descriptorSet) + + glyphs.set(font[], "semicongine".toRunes(), vec3()) + + glyphs.updateAllGPUBuffers(flush = true) var start = getMonoTime() while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: withNextFrame(framebuffer, commandbuffer): - bindDescriptorSet(commandbuffer, ds, 0, pipeline) + bindDescriptorSet(commandbuffer, font.descriptorSet, 0, pipeline) withRenderPass( vulkan.swapchain.renderPass, framebuffer, @@ -79,24 +47,19 @@ vec4(0, 0, 0, 0), ): withPipeline(commandbuffer, pipeline): - render( - commandbuffer, - pipeline, - EMPTY(), - glyphs, - fixedVertexCount = 6, # fixedInstanceCount = 2, - ) + renderGlyphs(commandbuffer, pipeline, glyphs) # cleanup checkVkResult vkDeviceWaitIdle(vulkan.device) destroyPipeline(pipeline) destroyRenderData(renderdata) +#[ proc test_01_static_label(time: float32) = - var font = loadFont("Overhaul.ttf", lineHeightPixels = 160) + var font = loadFont[MAX_GLYPHS]("Overhaul.ttf", lineHeightPixels = 160) var renderdata = initRenderData() var pipeline = - createPipeline[DefaultFontShader[FontDS]](renderPass = vulkan.swapchain.renderPass) + createPipeline[GlyphShader[MAX_GLYPHS]](renderPass = vulkan.swapchain.renderPass) var ds = asDescriptorSetData(FontDS(fontAtlas: font.fontAtlas.copy())) uploadImages(renderdata, ds) @@ -126,13 +89,13 @@ destroyRenderData(renderdata) proc test_02_multiple_animated(time: float32) = - var font1 = loadFont("Overhaul.ttf", lineHeightPixels = 40) - var font2 = loadFont("Overhaul.ttf", lineHeightPixels = 160) - var font3 = loadFont("DejaVuSans.ttf", lineHeightPixels = 160) + var font1 = loadFont[MAX_GLYPHS]("Overhaul.ttf", lineHeightPixels = 40) + var font2 = loadFont[MAX_GLYPHS]("Overhaul.ttf", lineHeightPixels = 160) + var font3 = loadFont[MAX_GLYPHS]("DejaVuSans.ttf", lineHeightPixels = 160) var renderdata = initRenderData() var pipeline = - createPipeline[DefaultFontShader[FontDS]](renderPass = vulkan.swapchain.renderPass) + createPipeline[GlyphShader[MAX_GLYPHS]](renderPass = vulkan.swapchain.renderPass) var ds1 = asDescriptorSetData(FontDS(fontAtlas: font1.fontAtlas.copy())) uploadImages(renderdata, ds1) @@ -201,11 +164,11 @@ destroyRenderData(renderdata) proc test_03_layouting(time: float32) = - var font = loadFont("DejaVuSans.ttf", lineHeightPixels = 40) + var font = loadFont[MAX_GLYPHS]("DejaVuSans.ttf", lineHeightPixels = 40) var renderdata = initRenderData() var pipeline = - createPipeline[DefaultFontShader[FontDS]](renderPass = vulkan.swapchain.renderPass) + createPipeline[GlyphShader[MAX_GLYPHS]](renderPass = vulkan.swapchain.renderPass) var ds = asDescriptorSetData(FontDS(fontAtlas: font.fontAtlas.copy())) uploadImages(renderdata, ds) @@ -274,11 +237,11 @@ destroyRenderData(renderdata) proc test_04_lots_of_texts(time: float32) = - var font = loadFont("DejaVuSans.ttf", lineHeightPixels = 160) + var font = loadFont[MAX_GLYPHS]("DejaVuSans.ttf", lineHeightPixels = 160) var renderdata = initRenderData() var pipeline = - createPipeline[DefaultFontShader[FontDS]](renderPass = vulkan.swapchain.renderPass) + createPipeline[GlyphShader[MAX_GLYPHS]](renderPass = vulkan.swapchain.renderPass) var ds = asDescriptorSetData(FontDS(fontAtlas: font.fontAtlas.copy())) uploadImages(renderdata, ds) @@ -319,6 +282,7 @@ checkVkResult vkDeviceWaitIdle(vulkan.device) destroyPipeline(pipeline) destroyRenderData(renderdata) +]# when isMainModule: var time = 1000'f32