Mercurial > games > semicongine
annotate tests/test_text.nim @ 1403:02d302c868d5
fix: font-rendering alignment, still something off with positioning
author | sam <sam@basx.dev> |
---|---|
date | Wed, 18 Dec 2024 23:39:54 +0700 |
parents | caf441eebc23 |
children | 80cfa19d1e2c |
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 |
1332 | 14 type FontDS = object |
15 fontAtlas: Image[Gray] | |
1327 | 16 |
1379
9ca552dad5fc
did: continue working on new glyph-renderer
sam <sam@basx.dev>
parents:
1374
diff
changeset
|
17 type EMPTY = object |
9ca552dad5fc
did: continue working on new glyph-renderer
sam <sam@basx.dev>
parents:
1374
diff
changeset
|
18 |
1399 | 19 const MAX_GLYPHS = 200 |
1374 | 20 proc test_01_static_label_new(time: float32) = |
1403
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
21 # var font = loadFont[MAX_GLYPHS]("Overhaul.ttf", lineHeightPixels = 200) |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
22 var font = loadFont[MAX_GLYPHS]("DejaVuSans.ttf", lineHeightPixels = 200) |
1374 | 23 var renderdata = initRenderData() |
24 var pipeline = | |
1399 | 25 createPipeline[GlyphShader[MAX_GLYPHS]](renderPass = vulkan.swapchain.renderPass) |
1401
4ecb004ee7f8
did: add horizontal advancment for glyph rendering
sam <sam@basx.dev>
parents:
1400
diff
changeset
|
26 var glyphs = font.initGlyphs(1000, baseScale = 0.1) |
1374 | 27 |
1379
9ca552dad5fc
did: continue working on new glyph-renderer
sam <sam@basx.dev>
parents:
1374
diff
changeset
|
28 assignBuffers(renderdata, glyphs) |
1399 | 29 assignBuffers(renderdata, font.descriptorSet) |
30 uploadImages(renderdata, font.descriptorSet) | |
31 initDescriptorSet(renderdata, pipeline.layout(0), font.descriptorSet) | |
32 | |
1374 | 33 var start = getMonoTime() |
34 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
|
35 let t = getMonoTime() |
20602878744e
did: finished basic implementation of new glyph-rendering system
sam <sam@basx.dev>
parents:
1399
diff
changeset
|
36 glyphs.reset() |
1403
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
37 glyphs.add("+", vec3(0.0, 0.0), anchor = vec2(0.5, 0.5), color = vec4(0, 0, 0, 1)) |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
38 glyphs.add( |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
39 "Hello world\nHow are you today?\nWell, I am fine".toRunes(), |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
40 vec3(0.5, 0.5), |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
41 alignment = Right, |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
42 anchor = vec2(1, 0.5), |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
43 color = vec4(0, 0, 0, 1), |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
44 ) |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
45 glyphs.add( |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
46 "Hello world\nHow are you today?\nWell, I am fine".toRunes(), |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
47 vec3(0.5, 0.5), |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
48 alignment = Left, |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
49 anchor = vec2(0, 0.5), |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
50 color = vec4(0, 0, 0, 1), |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
51 ) |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
52 glyphs.add("semi-\ncon-\ngine".toRunes(), vec3(0.5, -0.5), color = vec4(0, 0, 0, 1)) |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
53 glyphs.add("semi-\ncon-\ngine".toRunes(), vec3(-0.5, 0.5), color = vec4(0, 0, 0, 1)) |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
54 # glyphs.add("11111111111111111", vec3(0.5, 0.5), vec2(1, 0)) |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
55 # glyphs.add("22222222222222222", vec3(0.5, 0.5)) |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
56 # glyphs.add("33333333333333333", vec3(0.5, 0.5), vec2(0, 1)) |
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
57 glyphs.add("semi-\ncon-\ngineb".toRunes(), vec3(0.1, 0.9), color = vec4(0, 0, 0, 1)) |
1400
20602878744e
did: finished basic implementation of new glyph-rendering system
sam <sam@basx.dev>
parents:
1399
diff
changeset
|
58 glyphs.updateAllGPUBuffers(flush = true) |
20602878744e
did: finished basic implementation of new glyph-rendering system
sam <sam@basx.dev>
parents:
1399
diff
changeset
|
59 |
1374 | 60 withNextFrame(framebuffer, commandbuffer): |
1399 | 61 bindDescriptorSet(commandbuffer, font.descriptorSet, 0, pipeline) |
1374 | 62 withRenderPass( |
63 vulkan.swapchain.renderPass, | |
64 framebuffer, | |
65 commandbuffer, | |
66 vulkan.swapchain.width, | |
67 vulkan.swapchain.height, | |
1403
02d302c868d5
fix: font-rendering alignment, still something off with positioning
sam <sam@basx.dev>
parents:
1402
diff
changeset
|
68 vec4(1, 1, 1, 1), |
1374 | 69 ): |
70 withPipeline(commandbuffer, pipeline): | |
1399 | 71 renderGlyphs(commandbuffer, pipeline, glyphs) |
1374 | 72 |
1400
20602878744e
did: finished basic implementation of new glyph-rendering system
sam <sam@basx.dev>
parents:
1399
diff
changeset
|
73 # cleanup |
1374 | 74 checkVkResult vkDeviceWaitIdle(vulkan.device) |
75 destroyPipeline(pipeline) | |
76 destroyRenderData(renderdata) | |
77 | |
1399 | 78 #[ |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
79 proc test_01_static_label(time: float32) = |
1399 | 80 var font = loadFont[MAX_GLYPHS]("Overhaul.ttf", lineHeightPixels = 160) |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
81 var renderdata = initRenderData() |
1332 | 82 var pipeline = |
1399 | 83 createPipeline[GlyphShader[MAX_GLYPHS]](renderPass = vulkan.swapchain.renderPass) |
1236 | 84 |
1335 | 85 var ds = asDescriptorSetData(FontDS(fontAtlas: font.fontAtlas.copy())) |
1327 | 86 uploadImages(renderdata, ds) |
1332 | 87 initDescriptorSet(renderdata, pipeline.layout(0), ds) |
1236 | 88 |
1332 | 89 var label1 = |
90 initTextbox(renderdata, pipeline.layout(0), font, 0.0005, "Hello semicongine!") | |
1236 | 91 |
92 var start = getMonoTime() | |
93 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
94 label1.refresh() |
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
95 withNextFrame(framebuffer, commandbuffer): |
1327 | 96 bindDescriptorSet(commandbuffer, ds, 0, pipeline) |
1332 | 97 withRenderPass( |
98 vulkan.swapchain.renderPass, | |
99 framebuffer, | |
100 commandbuffer, | |
101 vulkan.swapchain.width, | |
102 vulkan.swapchain.height, | |
103 vec4(0, 0, 0, 0), | |
104 ): | |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
105 withPipeline(commandbuffer, pipeline): |
1379
9ca552dad5fc
did: continue working on new glyph-renderer
sam <sam@basx.dev>
parents:
1374
diff
changeset
|
106 render(commandbuffer, pipeline, label1, vec3(), vec4(1, 1, 1, 1)) |
1236 | 107 # cleanup |
108 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
|
109 destroyPipeline(pipeline) |
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
110 destroyRenderData(renderdata) |
1236 | 111 |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
112 proc test_02_multiple_animated(time: float32) = |
1399 | 113 var font1 = loadFont[MAX_GLYPHS]("Overhaul.ttf", lineHeightPixels = 40) |
114 var font2 = loadFont[MAX_GLYPHS]("Overhaul.ttf", lineHeightPixels = 160) | |
115 var font3 = loadFont[MAX_GLYPHS]("DejaVuSans.ttf", lineHeightPixels = 160) | |
1327 | 116 var renderdata = initRenderData() |
117 | |
1332 | 118 var pipeline = |
1399 | 119 createPipeline[GlyphShader[MAX_GLYPHS]](renderPass = vulkan.swapchain.renderPass) |
1327 | 120 |
1335 | 121 var ds1 = asDescriptorSetData(FontDS(fontAtlas: font1.fontAtlas.copy())) |
1327 | 122 uploadImages(renderdata, ds1) |
123 initDescriptorSet(renderdata, pipeline.layout(0), ds1) | |
124 | |
1335 | 125 var ds2 = asDescriptorSetData(FontDS(fontAtlas: font2.fontAtlas.copy())) |
1327 | 126 uploadImages(renderdata, ds2) |
127 initDescriptorSet(renderdata, pipeline.layout(0), ds2) | |
128 | |
1335 | 129 var ds3 = asDescriptorSetData(FontDS(fontAtlas: font3.fontAtlas.copy())) |
1327 | 130 uploadImages(renderdata, ds3) |
131 initDescriptorSet(renderdata, pipeline.layout(0), ds3) | |
132 | |
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
133 var labels = [ |
1332 | 134 initTextbox(renderdata, pipeline.layout(0), font1, 0.004, " 0"), |
135 initTextbox(renderdata, pipeline.layout(0), font2, 0.001, " 1"), | |
136 initTextbox(renderdata, pipeline.layout(0), font3, 0.001, " 2"), | |
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
137 ] |
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
138 |
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
139 var start = getMonoTime() |
1238
03634915bbdb
add: tests for updating texts, does not pass validation atm
sam <sam@basx.dev>
parents:
1237
diff
changeset
|
140 var p = 0 |
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
141 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
142 let progress = ((getMonoTime() - start).inMilliseconds().int / 1000) / time |
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
143 for i in 0 ..< labels.len: |
1238
03634915bbdb
add: tests for updating texts, does not pass validation atm
sam <sam@basx.dev>
parents:
1237
diff
changeset
|
144 labels[i].text = $(p + i) |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
145 labels[i].refresh() |
1238
03634915bbdb
add: tests for updating texts, does not pass validation atm
sam <sam@basx.dev>
parents:
1237
diff
changeset
|
146 inc p |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
147 withNextFrame(framebuffer, commandbuffer): |
1332 | 148 withRenderPass( |
149 vulkan.swapchain.renderPass, | |
150 framebuffer, | |
151 commandbuffer, | |
152 vulkan.swapchain.width, | |
153 vulkan.swapchain.height, | |
154 vec4(0, 0, 0, 0), | |
155 ): | |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
156 withPipeline(commandbuffer, pipeline): |
1327 | 157 bindDescriptorSet(commandbuffer, ds1, 0, pipeline) |
158 render( | |
159 commandbuffer, | |
160 pipeline, | |
161 labels[0], | |
1332 | 162 position = vec3(0 / labels.len, 0.1 + progress * 0.5), |
163 color = vec4(1, 1, 1, 1), | |
1327 | 164 ) |
165 bindDescriptorSet(commandbuffer, ds2, 0, pipeline) | |
166 render( | |
167 commandbuffer, | |
168 pipeline, | |
169 labels[1], | |
1332 | 170 position = vec3(1 / labels.len, 0.1 + progress * 0.5), |
171 color = vec4(1, 1, 1, 1), | |
1327 | 172 ) |
173 bindDescriptorSet(commandbuffer, ds3, 0, pipeline) | |
174 render( | |
175 commandbuffer, | |
176 pipeline, | |
177 labels[2], | |
1332 | 178 position = vec3(2 / labels.len, 0.1 + progress * 0.5), |
179 color = vec4(1, 1, 1, 1), | |
1327 | 180 ) |
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
181 |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
182 # cleanup |
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
183 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
|
184 destroyPipeline(pipeline) |
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
185 destroyRenderData(renderdata) |
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
186 |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
187 proc test_03_layouting(time: float32) = |
1399 | 188 var font = loadFont[MAX_GLYPHS]("DejaVuSans.ttf", lineHeightPixels = 40) |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
189 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
|
190 |
1332 | 191 var pipeline = |
1399 | 192 createPipeline[GlyphShader[MAX_GLYPHS]](renderPass = vulkan.swapchain.renderPass) |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
193 |
1335 | 194 var ds = asDescriptorSetData(FontDS(fontAtlas: font.fontAtlas.copy())) |
1327 | 195 uploadImages(renderdata, ds) |
1332 | 196 initDescriptorSet(renderdata, pipeline.layout(0), ds) |
1327 | 197 |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
198 var labels: seq[Textbox] |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
199 |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
200 for horizontal in HorizontalAlignment: |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
201 labels.add initTextbox( |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
202 renderdata, |
1292
5de466f5f087
add: color utils and textbox refactoring
sam <sam@basx.dev>
parents:
1283
diff
changeset
|
203 pipeline.layout(0), |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
204 font, |
1327 | 205 0.001, |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
206 $horizontal & " aligned", |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
207 horizontalAlignment = horizontal, |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
208 ) |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
209 for vertical in VerticalAlignment: |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
210 labels.add initTextbox( |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
211 renderdata, |
1292
5de466f5f087
add: color utils and textbox refactoring
sam <sam@basx.dev>
parents:
1283
diff
changeset
|
212 pipeline.layout(0), |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
213 font, |
1327 | 214 0.001, |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
215 $vertical & " aligned", |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
216 verticalAlignment = vertical, |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
217 ) |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
218 labels.add initTextbox( |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
219 renderdata, |
1292
5de466f5f087
add: color utils and textbox refactoring
sam <sam@basx.dev>
parents:
1283
diff
changeset
|
220 pipeline.layout(0), |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
221 font, |
1327 | 222 0.001, |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
223 """Paragraph |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
224 This is a somewhat longer paragraph with a few newlines and a maximum width of 0.2. |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
225 |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
226 It should display with some space above and have a pleasing appearance overall! :)""", |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
227 maxWidth = 0.6, |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
228 verticalAlignment = Top, |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
229 horizontalAlignment = Left, |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
230 ) |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
231 |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
232 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
|
233 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
|
234 let progress = ((getMonoTime() - start).inMilliseconds().int / 1000) / time |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
235 withNextFrame(framebuffer, commandbuffer): |
1327 | 236 bindDescriptorSet(commandbuffer, ds, 0, pipeline) |
1332 | 237 withRenderPass( |
238 vulkan.swapchain.renderPass, | |
239 framebuffer, | |
240 commandbuffer, | |
241 vulkan.swapchain.width, | |
242 vulkan.swapchain.height, | |
243 vec4(0, 0, 0, 0), | |
244 ): | |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
245 withPipeline(commandbuffer, pipeline): |
1327 | 246 for i in 0 ..< labels.len: |
1332 | 247 render( |
248 commandbuffer, | |
249 pipeline, | |
250 labels[i], | |
251 vec3(0.5 - i.float32 * 0.1, 0.5 - i.float32 * 0.1), | |
252 vec4(1, 1, 1, 1), | |
253 ) | |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
254 |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
255 # cleanup |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
256 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
|
257 destroyPipeline(pipeline) |
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
258 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
|
259 |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
260 proc test_04_lots_of_texts(time: float32) = |
1399 | 261 var font = loadFont[MAX_GLYPHS]("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
|
262 var renderdata = initRenderData() |
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
263 |
1332 | 264 var pipeline = |
1399 | 265 createPipeline[GlyphShader[MAX_GLYPHS]](renderPass = vulkan.swapchain.renderPass) |
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
266 |
1335 | 267 var ds = asDescriptorSetData(FontDS(fontAtlas: font.fontAtlas.copy())) |
1327 | 268 uploadImages(renderdata, ds) |
1332 | 269 initDescriptorSet(renderdata, pipeline.layout(0), ds) |
1327 | 270 |
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
271 var labels: seq[Textbox] |
1327 | 272 var positions = newSeq[Vec3f](100) |
273 var colors = newSeq[Vec4f](100) | |
1329 | 274 var scales = newSeq[Vec2f](100) |
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
275 for i in 0 ..< 100: |
1327 | 276 positions[i] = vec3(rand(-0.5 .. 0.5), rand(-0.5 .. 0.5), rand(-0.1 .. 0.1)) |
1332 | 277 colors[i] = |
278 vec4(rand(0.5 .. 1.0), rand(0.5 .. 1.0), rand(0.5 .. 1.0), rand(0.5 .. 1.0)) | |
1329 | 279 scales[i] = vec2(rand(0.5'f32 .. 1.5'f32), rand(0.5'f32 .. 1.5'f32)) |
1332 | 280 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
|
281 |
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
282 var start = getMonoTime() |
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
283 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
284 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
|
285 l.refresh() |
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
286 withNextFrame(framebuffer, commandbuffer): |
1327 | 287 bindDescriptorSet(commandbuffer, ds, 0, pipeline) |
1332 | 288 withRenderPass( |
289 vulkan.swapchain.renderPass, | |
290 framebuffer, | |
291 commandbuffer, | |
292 vulkan.swapchain.width, | |
293 vulkan.swapchain.height, | |
294 vec4(0, 0, 0, 0), | |
295 ): | |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
296 withPipeline(commandbuffer, pipeline): |
1327 | 297 for i in 0 ..< labels.len: |
1332 | 298 render( |
299 commandbuffer, pipeline, labels[i], positions[i], colors[i], scales[i] | |
300 ) | |
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
301 |
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
302 # cleanup |
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
303 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
|
304 destroyPipeline(pipeline) |
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
305 destroyRenderData(renderdata) |
1399 | 306 ]# |
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
307 |
1236 | 308 when isMainModule: |
1381
c8d1b87cf6c8
did: make progress on new glyph-rendering system
sam <sam@basx.dev>
parents:
1380
diff
changeset
|
309 var time = 1000'f32 |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
310 initVulkan() |
1236 | 311 |
1241
a0ed1a918fda
fix: letters sometimes overlapping other letters quad
sam <sam@basx.dev>
parents:
1240
diff
changeset
|
312 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
|
313 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
|
314 setupSwapchain(renderpass = renderpass) |
1236 | 315 |
1241
a0ed1a918fda
fix: letters sometimes overlapping other letters quad
sam <sam@basx.dev>
parents:
1240
diff
changeset
|
316 # tests a simple triangle with minimalistic shader and vertex format |
1374 | 317 test_01_static_label_new(time) |
1379
9ca552dad5fc
did: continue working on new glyph-renderer
sam <sam@basx.dev>
parents:
1374
diff
changeset
|
318 # test_01_static_label(time) |
9ca552dad5fc
did: continue working on new glyph-renderer
sam <sam@basx.dev>
parents:
1374
diff
changeset
|
319 # test_02_multiple_animated(time) |
9ca552dad5fc
did: continue working on new glyph-renderer
sam <sam@basx.dev>
parents:
1374
diff
changeset
|
320 # test_03_layouting(time) |
9ca552dad5fc
did: continue working on new glyph-renderer
sam <sam@basx.dev>
parents:
1374
diff
changeset
|
321 # 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
|
322 |
1241
a0ed1a918fda
fix: letters sometimes overlapping other letters quad
sam <sam@basx.dev>
parents:
1240
diff
changeset
|
323 checkVkResult vkDeviceWaitIdle(vulkan.device) |
a0ed1a918fda
fix: letters sometimes overlapping other letters quad
sam <sam@basx.dev>
parents:
1240
diff
changeset
|
324 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
|
325 clearSwapchain() |
1236 | 326 |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
327 destroyVulkan() |