Mercurial > games > semicongine
annotate tests/test_text.nim @ 1406:aeb15aa9768c
did: continue text layout, improve vector api
author | sam <sam@basx.dev> |
---|---|
date | Sat, 21 Dec 2024 19:32:59 +0700 |
parents | 46bac138ad6c |
children | 56f927b89716 |
rev | line source |
---|---|
1236 | 1 import std/os |
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
2 import std/algorithm |
1238
03634915bbdb
add: tests for updating texts, does not pass validation atm
sam <sam@basx.dev>
parents:
1237
diff
changeset
|
3 import std/strutils |
1236 | 4 import std/sequtils |
5 import std/monotimes | |
6 import std/times | |
1381
c8d1b87cf6c8
did: make progress on new glyph-rendering system
sam <sam@basx.dev>
parents:
1380
diff
changeset
|
7 import std/tables |
1236 | 8 import std/options |
9 import std/random | |
1381
c8d1b87cf6c8
did: make progress on new glyph-rendering system
sam <sam@basx.dev>
parents:
1380
diff
changeset
|
10 import std/unicode |
1236 | 11 |
1267 | 12 import ../semicongine |
1236 | 13 |
1404
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
14 const MAX_CODEPOINTS = 200 |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
15 const FONTNAME = "Overhaul.ttf" |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
16 # const FONTNAME = "DejaVuSans.ttf" |
1379
9ca552dad5fc
did: continue working on new glyph-renderer
sam <sam@basx.dev>
parents:
1374
diff
changeset
|
17 |
1404
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
18 proc test_01_static_label(time: float32) = |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
19 var font = loadFont[MAX_CODEPOINTS](FONTNAME, lineHeightPixels = 200) |
1374 | 20 var renderdata = initRenderData() |
1404
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
21 var pipeline = createPipeline[GlyphShader[MAX_CODEPOINTS]]( |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
22 renderPass = vulkan.swapchain.renderPass |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
23 ) |
1401
4ecb004ee7f8
did: add horizontal advancment for glyph rendering
sam <sam@basx.dev>
parents:
1400
diff
changeset
|
24 var glyphs = font.initGlyphs(1000, baseScale = 0.1) |
1374 | 25 |
1379
9ca552dad5fc
did: continue working on new glyph-renderer
sam <sam@basx.dev>
parents:
1374
diff
changeset
|
26 assignBuffers(renderdata, glyphs) |
1399 | 27 assignBuffers(renderdata, font.descriptorSet) |
28 uploadImages(renderdata, font.descriptorSet) | |
29 initDescriptorSet(renderdata, pipeline.layout(0), font.descriptorSet) | |
30 | |
1374 | 31 var start = getMonoTime() |
32 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | |
1400
20602878744e
did: finished basic implementation of new glyph-rendering system
sam <sam@basx.dev>
parents:
1399
diff
changeset
|
33 let t = getMonoTime() |
20602878744e
did: finished basic implementation of new glyph-rendering system
sam <sam@basx.dev>
parents:
1399
diff
changeset
|
34 glyphs.reset() |
1404
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
35 glyphs.add("Hello semicongine!", vec3(0.5, 0.5), anchor = vec2(0.5, 0.5)) |
1400
20602878744e
did: finished basic implementation of new glyph-rendering system
sam <sam@basx.dev>
parents:
1399
diff
changeset
|
36 glyphs.updateAllGPUBuffers(flush = true) |
20602878744e
did: finished basic implementation of new glyph-rendering system
sam <sam@basx.dev>
parents:
1399
diff
changeset
|
37 |
1374 | 38 withNextFrame(framebuffer, commandbuffer): |
1399 | 39 bindDescriptorSet(commandbuffer, font.descriptorSet, 0, pipeline) |
1374 | 40 withRenderPass( |
41 vulkan.swapchain.renderPass, | |
42 framebuffer, | |
43 commandbuffer, | |
44 vulkan.swapchain.width, | |
45 vulkan.swapchain.height, | |
1404
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
46 vec4(0, 0, 0, 0), |
1374 | 47 ): |
48 withPipeline(commandbuffer, pipeline): | |
1399 | 49 renderGlyphs(commandbuffer, pipeline, glyphs) |
1374 | 50 |
1400
20602878744e
did: finished basic implementation of new glyph-rendering system
sam <sam@basx.dev>
parents:
1399
diff
changeset
|
51 # cleanup |
1374 | 52 checkVkResult vkDeviceWaitIdle(vulkan.device) |
53 destroyPipeline(pipeline) | |
54 destroyRenderData(renderdata) | |
55 | |
1404
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
56 proc test_02_multi_counter(time: float32) = |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
57 var font1 = loadFont[MAX_CODEPOINTS]("Overhaul.ttf", lineHeightPixels = 40) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
58 var font2 = loadFont[MAX_CODEPOINTS]("Overhaul.ttf", lineHeightPixels = 160) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
59 var font3 = loadFont[MAX_CODEPOINTS]("DejaVuSans.ttf", lineHeightPixels = 160) |
1327 | 60 var renderdata = initRenderData() |
61 | |
1404
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
62 var pipeline = createPipeline[GlyphShader[MAX_CODEPOINTS]]( |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
63 renderPass = vulkan.swapchain.renderPass |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
64 ) |
1327 | 65 |
1404
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
66 assignBuffers(renderdata, font1.descriptorSet) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
67 assignBuffers(renderdata, font2.descriptorSet) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
68 assignBuffers(renderdata, font3.descriptorSet) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
69 uploadImages(renderdata, font1.descriptorSet) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
70 uploadImages(renderdata, font2.descriptorSet) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
71 uploadImages(renderdata, font3.descriptorSet) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
72 initDescriptorSet(renderdata, pipeline.layout(0), font1.descriptorSet) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
73 initDescriptorSet(renderdata, pipeline.layout(0), font2.descriptorSet) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
74 initDescriptorSet(renderdata, pipeline.layout(0), font3.descriptorSet) |
1327 | 75 |
1404
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
76 var glyphs1 = font1.initGlyphs(10, baseScale = 0.1) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
77 var glyphs2 = font2.initGlyphs(10, baseScale = 0.1) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
78 var glyphs3 = font3.initGlyphs(10, baseScale = 0.1) |
1327 | 79 |
1404
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
80 assignBuffers(renderdata, glyphs1) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
81 assignBuffers(renderdata, glyphs2) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
82 assignBuffers(renderdata, glyphs3) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
83 |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
84 var labels = [" 0", " 1", " 2"] |
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
85 |
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
86 var start = getMonoTime() |
1238
03634915bbdb
add: tests for updating texts, does not pass validation atm
sam <sam@basx.dev>
parents:
1237
diff
changeset
|
87 var p = 0 |
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
88 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
89 let progress = ((getMonoTime() - start).inMilliseconds().int / 1000) / time |
1404
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
90 glyphs1.reset() |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
91 glyphs2.reset() |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
92 glyphs3.reset() |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
93 |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
94 glyphs1.add($(p + 0), vec3(0.3, 0.5)) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
95 glyphs2.add($(p + 1), vec3(0.5, 0.5)) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
96 glyphs3.add($(p + 2), vec3(0.7, 0.5)) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
97 |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
98 glyphs1.updateAllGPUBuffers(flush = true) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
99 glyphs2.updateAllGPUBuffers(flush = true) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
100 glyphs3.updateAllGPUBuffers(flush = true) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
101 |
1238
03634915bbdb
add: tests for updating texts, does not pass validation atm
sam <sam@basx.dev>
parents:
1237
diff
changeset
|
102 inc p |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
103 withNextFrame(framebuffer, commandbuffer): |
1332 | 104 withRenderPass( |
105 vulkan.swapchain.renderPass, | |
106 framebuffer, | |
107 commandbuffer, | |
108 vulkan.swapchain.width, | |
109 vulkan.swapchain.height, | |
110 vec4(0, 0, 0, 0), | |
111 ): | |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
112 withPipeline(commandbuffer, pipeline): |
1404
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
113 bindDescriptorSet(commandbuffer, font1.descriptorSet, 0, pipeline) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
114 renderGlyphs(commandbuffer, pipeline, glyphs1) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
115 bindDescriptorSet(commandbuffer, font2.descriptorSet, 0, pipeline) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
116 renderGlyphs(commandbuffer, pipeline, glyphs2) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
117 bindDescriptorSet(commandbuffer, font3.descriptorSet, 0, pipeline) |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
118 renderGlyphs(commandbuffer, pipeline, glyphs3) |
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
119 |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
120 # cleanup |
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
121 checkVkResult vkDeviceWaitIdle(vulkan.device) |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
122 destroyPipeline(pipeline) |
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
123 destroyRenderData(renderdata) |
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
124 |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
125 proc test_03_layouting(time: float32) = |
1406
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
126 var font = loadFont[MAX_CODEPOINTS]("DejaVuSans.ttf", lineHeightPixels = 160) |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
127 var renderdata = initRenderData() |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
128 |
1404
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
129 var pipeline = createPipeline[GlyphShader[MAX_CODEPOINTS]]( |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
130 renderPass = vulkan.swapchain.renderPass |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
131 ) |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
132 |
1405 | 133 assignBuffers(renderdata, font.descriptorSet) |
134 uploadImages(renderdata, font.descriptorSet) | |
135 initDescriptorSet(renderdata, pipeline.layout(0), font.descriptorSet) | |
136 | |
137 var glyphs = font.initGlyphs(1000, baseScale = 0.1) | |
138 assignBuffers(renderdata, glyphs) | |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
139 |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
140 var start = getMonoTime() |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
141 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
142 let progress = ((getMonoTime() - start).inMilliseconds().int / 1000) / time |
1406
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
143 |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
144 glyphs.reset() |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
145 glyphs.add("Anchor Center", vec3(0, 0), anchor = vec2(0, 0)) |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
146 glyphs.add("Anchor top left", vec3(0, 0), anchor = vec2(-1, 1)) |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
147 glyphs.add("Anchor top right", vec3(0, 0), anchor = vec2(1, 1)) |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
148 glyphs.add("Anchor bottom left", vec3(0, 0), anchor = vec2(-1, -1)) |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
149 glyphs.add("Anchor bottom right", vec3(0, 0), anchor = vec2(1, -1)) |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
150 |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
151 glyphs.add( |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
152 """Paragraph |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
153 This is a somewhat longer paragraph with a few newlines and a maximum width of 0.2. |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
154 |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
155 It should display with some space above and have a pleasing appearance overall! :)""", |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
156 vec3(0.5, 0.5), |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
157 anchor = vec2(0, 0), |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
158 alignment = Center, |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
159 ) |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
160 glyphs.updateAllGPUBuffers(flush = true) |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
161 |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
162 withNextFrame(framebuffer, commandbuffer): |
1405 | 163 bindDescriptorSet(commandbuffer, font.descriptorSet, 0, pipeline) |
1332 | 164 withRenderPass( |
165 vulkan.swapchain.renderPass, | |
166 framebuffer, | |
167 commandbuffer, | |
168 vulkan.swapchain.width, | |
169 vulkan.swapchain.height, | |
170 vec4(0, 0, 0, 0), | |
171 ): | |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
172 withPipeline(commandbuffer, pipeline): |
1405 | 173 renderGlyphs(commandbuffer, pipeline, glyphs) |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
174 |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
175 # cleanup |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
176 checkVkResult vkDeviceWaitIdle(vulkan.device) |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
177 destroyPipeline(pipeline) |
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
178 destroyRenderData(renderdata) |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
179 |
1405 | 180 #[ |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
181 proc test_04_lots_of_texts(time: float32) = |
1404
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
182 var font = loadFont[MAX_CODEPOINTS]("DejaVuSans.ttf", lineHeightPixels = 160) |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
183 var renderdata = initRenderData() |
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
184 |
1404
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
185 var pipeline = createPipeline[GlyphShader[MAX_CODEPOINTS]]( |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
186 renderPass = vulkan.swapchain.renderPass |
80cfa19d1e2c
did: finally get text/glyph layouting correct again, 2/4 test adapted to new glyph API
sam <sam@basx.dev>
parents:
1403
diff
changeset
|
187 ) |
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
188 |
1335 | 189 var ds = asDescriptorSetData(FontDS(fontAtlas: font.fontAtlas.copy())) |
1327 | 190 uploadImages(renderdata, ds) |
1332 | 191 initDescriptorSet(renderdata, pipeline.layout(0), ds) |
1327 | 192 |
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
193 var labels: seq[Textbox] |
1327 | 194 var positions = newSeq[Vec3f](100) |
195 var colors = newSeq[Vec4f](100) | |
1329 | 196 var scales = newSeq[Vec2f](100) |
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
197 for i in 0 ..< 100: |
1327 | 198 positions[i] = vec3(rand(-0.5 .. 0.5), rand(-0.5 .. 0.5), rand(-0.1 .. 0.1)) |
1332 | 199 colors[i] = |
200 vec4(rand(0.5 .. 1.0), rand(0.5 .. 1.0), rand(0.5 .. 1.0), rand(0.5 .. 1.0)) | |
1329 | 201 scales[i] = vec2(rand(0.5'f32 .. 1.5'f32), rand(0.5'f32 .. 1.5'f32)) |
1332 | 202 labels.add initTextbox(renderdata, pipeline.layout(0), font, 0.001, $i) |
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
203 |
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
204 var start = getMonoTime() |
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
205 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
206 for l in labels.mitems: |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
207 l.refresh() |
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
208 withNextFrame(framebuffer, commandbuffer): |
1327 | 209 bindDescriptorSet(commandbuffer, ds, 0, pipeline) |
1332 | 210 withRenderPass( |
211 vulkan.swapchain.renderPass, | |
212 framebuffer, | |
213 commandbuffer, | |
214 vulkan.swapchain.width, | |
215 vulkan.swapchain.height, | |
216 vec4(0, 0, 0, 0), | |
217 ): | |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
218 withPipeline(commandbuffer, pipeline): |
1327 | 219 for i in 0 ..< labels.len: |
1332 | 220 render( |
221 commandbuffer, pipeline, labels[i], positions[i], colors[i], scales[i] | |
222 ) | |
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
223 |
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
224 # cleanup |
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
225 checkVkResult vkDeviceWaitIdle(vulkan.device) |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
226 destroyPipeline(pipeline) |
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
227 destroyRenderData(renderdata) |
1399 | 228 ]# |
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
229 |
1236 | 230 when isMainModule: |
1406
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
231 var time = 100'f32 |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
232 initVulkan() |
1236 | 233 |
1241
a0ed1a918fda
fix: letters sometimes overlapping other letters quad
sam <sam@basx.dev>
parents:
1240
diff
changeset
|
234 for depthBuffer in [true, false]: |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
235 var renderpass = createDirectPresentationRenderPass(depthBuffer = depthBuffer) |
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
236 setupSwapchain(renderpass = renderpass) |
1236 | 237 |
1241
a0ed1a918fda
fix: letters sometimes overlapping other letters quad
sam <sam@basx.dev>
parents:
1240
diff
changeset
|
238 # tests a simple triangle with minimalistic shader and vertex format |
1406
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
239 # test_01_static_label(time) |
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
240 # test_02_multi_counter(time) |
1405 | 241 test_03_layouting(time) |
1379
9ca552dad5fc
did: continue working on new glyph-renderer
sam <sam@basx.dev>
parents:
1374
diff
changeset
|
242 # test_04_lots_of_texts(time) |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
243 |
1241
a0ed1a918fda
fix: letters sometimes overlapping other letters quad
sam <sam@basx.dev>
parents:
1240
diff
changeset
|
244 checkVkResult vkDeviceWaitIdle(vulkan.device) |
a0ed1a918fda
fix: letters sometimes overlapping other letters quad
sam <sam@basx.dev>
parents:
1240
diff
changeset
|
245 vkDestroyRenderPass(vulkan.device, renderpass.vk, nil) |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
246 clearSwapchain() |
1236 | 247 |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
248 destroyVulkan() |