Mercurial > games > semicongine
annotate tests/test_text.nim @ 1500:91c8c3b7cbf0
add: futhark tests for generating vulkan api
| author | sam <sam@basx.dev> |
|---|---|
| date | Wed, 26 Nov 2025 21:36:48 +0700 |
| parents | ab01c577d91c |
| children |
| 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 |
| 1427 | 13 import ../semicongine/rendering |
| 14 import ../semicongine/text | |
| 15 import ../semicongine/input | |
| 1429 | 16 import ../semicongine/fonts |
| 1236 | 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 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
|
19 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
|
20 # const FONTNAME = "DejaVuSans.ttf" |
|
1379
9ca552dad5fc
did: continue working on new glyph-renderer
sam <sam@basx.dev>
parents:
1374
diff
changeset
|
21 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
22 proc test_01_static_label(time: float32, renderPass: RenderPass) = |
|
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
|
23 var font = loadFont[MAX_CODEPOINTS](FONTNAME, lineHeightPixels = 200) |
| 1374 | 24 var renderdata = initRenderData() |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
25 var pipeline = createPipeline(GlyphShader[MAX_CODEPOINTS](), renderPass = renderPass) |
| 1410 | 26 var textbuffer = font.initTextBuffer(1000, renderdata, baseScale = 0.1) |
| 1374 | 27 |
|
1409
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
28 font.upload(renderdata) |
|
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
29 font.addToPipeline(renderdata, pipeline) |
| 1399 | 30 |
|
1413
bc6782c0edd6
did: cleanup, wrong direction in z-buffer
sam <sam@basx.dev>
parents:
1410
diff
changeset
|
31 # small drop-shadow |
|
bc6782c0edd6
did: cleanup, wrong direction in z-buffer
sam <sam@basx.dev>
parents:
1410
diff
changeset
|
32 discard textbuffer.add( |
|
bc6782c0edd6
did: cleanup, wrong direction in z-buffer
sam <sam@basx.dev>
parents:
1410
diff
changeset
|
33 "Hello semicongine!", |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
34 vec3(0.009, -0.009 * getAspectRatio(), 0.2), |
|
1413
bc6782c0edd6
did: cleanup, wrong direction in z-buffer
sam <sam@basx.dev>
parents:
1410
diff
changeset
|
35 color = vec4(0.02, 0.02, 0.02, 1), |
|
bc6782c0edd6
did: cleanup, wrong direction in z-buffer
sam <sam@basx.dev>
parents:
1410
diff
changeset
|
36 scale = 1.01, |
|
bc6782c0edd6
did: cleanup, wrong direction in z-buffer
sam <sam@basx.dev>
parents:
1410
diff
changeset
|
37 ) |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
38 discard textbuffer.add("Hello semicongine!", vec3(0, 0, 0.1)) |
|
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
39 |
| 1374 | 40 var start = getMonoTime() |
| 41 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
|
42 let t = getMonoTime() |
|
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
43 if windowWasResized(): |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
44 textbuffer.refresh() |
|
1400
20602878744e
did: finished basic implementation of new glyph-rendering system
sam <sam@basx.dev>
parents:
1399
diff
changeset
|
45 |
| 1374 | 46 withNextFrame(framebuffer, commandbuffer): |
|
1409
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
47 font.bindTo(pipeline, commandbuffer) |
| 1374 | 48 withRenderPass( |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
49 renderPass, |
| 1374 | 50 framebuffer, |
| 51 commandbuffer, | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
52 frameWidth(), |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
53 frameHeight(), |
|
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
|
54 vec4(0, 0, 0, 0), |
| 1374 | 55 ): |
| 56 withPipeline(commandbuffer, pipeline): | |
|
1407
56f927b89716
did: finally got typography right, still improving text-rendering API to cache text parts
sam <sam@basx.dev>
parents:
1406
diff
changeset
|
57 renderTextBuffer(commandbuffer, pipeline, textbuffer) |
| 1374 | 58 |
|
1400
20602878744e
did: finished basic implementation of new glyph-rendering system
sam <sam@basx.dev>
parents:
1399
diff
changeset
|
59 # cleanup |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
60 checkVkResult vkDeviceWaitIdle(engine().vulkan.device) |
| 1374 | 61 destroyPipeline(pipeline) |
| 62 destroyRenderData(renderdata) | |
| 63 | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
64 proc test_02_multi_counter(time: float32, renderPass: RenderPass) = |
|
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
|
65 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
|
66 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
|
67 var font3 = loadFont[MAX_CODEPOINTS]("DejaVuSans.ttf", lineHeightPixels = 160) |
| 1327 | 68 var renderdata = initRenderData() |
| 69 | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
70 var pipeline = createPipeline(GlyphShader[MAX_CODEPOINTS](), renderPass = renderPass) |
| 1327 | 71 |
|
1409
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
72 font1.upload(renderdata) |
|
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
73 font2.upload(renderdata) |
|
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
74 font3.upload(renderdata) |
|
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
75 font1.addToPipeline(renderdata, pipeline) |
|
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
76 font2.addToPipeline(renderdata, pipeline) |
|
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
77 font3.addToPipeline(renderdata, pipeline) |
| 1327 | 78 |
| 1410 | 79 var textbuffer1 = font1.initTextBuffer(10, renderdata, baseScale = 0.1) |
| 80 var textbuffer2 = font2.initTextBuffer(10, renderdata, baseScale = 0.1) | |
| 81 var textbuffer3 = font3.initTextBuffer(10, renderdata, baseScale = 0.1) | |
|
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
|
82 |
|
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
83 var p = 0 |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
84 let l1 = textbuffer1.add($(p + 0), vec3(0.3, 0.5), capacity = 5) |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
85 let l2 = textbuffer2.add($(p + 1), vec3(0.5, 0.5), capacity = 5) |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
86 let l3 = textbuffer3.add($(p + 2), vec3(0.7, 0.5), capacity = 5) |
|
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
87 |
|
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
88 var start = getMonoTime() |
|
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
89 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
|
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
90 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
|
91 |
|
1238
03634915bbdb
add: tests for updating texts, does not pass validation atm
sam <sam@basx.dev>
parents:
1237
diff
changeset
|
92 inc p |
|
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
93 |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
94 textbuffer1.text(l1, $(p + 0)) |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
95 textbuffer2.text(l2, $(p + 1)) |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
96 textbuffer3.text(l3, $(p + 2)) |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
97 |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
98 textbuffer1.refresh() |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
99 textbuffer2.refresh() |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
100 textbuffer3.refresh() |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
101 |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
102 withNextFrame(framebuffer, commandbuffer): |
| 1332 | 103 withRenderPass( |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
104 renderPass, |
| 1332 | 105 framebuffer, |
| 106 commandbuffer, | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
107 frameWidth(), |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
108 frameHeight(), |
| 1332 | 109 vec4(0, 0, 0, 0), |
| 110 ): | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
111 withPipeline(commandbuffer, pipeline): |
|
1409
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
112 bindDescriptorSet(commandbuffer, font1.descriptorSet, 3, pipeline) |
|
1407
56f927b89716
did: finally got typography right, still improving text-rendering API to cache text parts
sam <sam@basx.dev>
parents:
1406
diff
changeset
|
113 renderTextBuffer(commandbuffer, pipeline, textbuffer1) |
|
1409
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
114 bindDescriptorSet(commandbuffer, font2.descriptorSet, 3, pipeline) |
|
1407
56f927b89716
did: finally got typography right, still improving text-rendering API to cache text parts
sam <sam@basx.dev>
parents:
1406
diff
changeset
|
115 renderTextBuffer(commandbuffer, pipeline, textbuffer2) |
|
1409
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
116 bindDescriptorSet(commandbuffer, font3.descriptorSet, 3, pipeline) |
|
1407
56f927b89716
did: finally got typography right, still improving text-rendering API to cache text parts
sam <sam@basx.dev>
parents:
1406
diff
changeset
|
117 renderTextBuffer(commandbuffer, pipeline, textbuffer3) |
|
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
118 |
|
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
119 # cleanup |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
120 checkVkResult vkDeviceWaitIdle(engine().vulkan.device) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
121 destroyPipeline(pipeline) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
122 destroyRenderData(renderdata) |
|
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
123 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
124 proc test_03_layouting(time: float32, renderPass: RenderPass) = |
|
1406
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
125 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
|
126 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
|
127 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
128 var pipeline = createPipeline(GlyphShader[MAX_CODEPOINTS](), renderPass = renderPass) |
|
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
129 |
|
1409
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
130 font.upload(renderdata) |
|
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
131 font.addToPipeline(renderdata, pipeline) |
| 1405 | 132 |
| 1410 | 133 var textbuffer = font.initTextBuffer(1000, renderdata, baseScale = 0.1) |
|
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
134 |
|
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
135 discard textbuffer.add("Anchor at center", vec3(0, 0), anchor = vec2(0, 0)) |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
136 discard textbuffer.add("Anchor at top left`", vec3(-1, 1), anchor = vec2(-1, 1)) |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
137 discard textbuffer.add("Anchor at top right", vec3(1, 1), anchor = vec2(1, 1)) |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
138 discard textbuffer.add("Anchor at bottom left", vec3(-1, -1), anchor = vec2(-1, -1)) |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
139 discard textbuffer.add("Anchor at bottom right", vec3(1, -1), anchor = vec2(1, -1)) |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
140 |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
141 discard textbuffer.add( |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
142 "Mutiline text\nLeft aligned\nCool!", vec3(-0.5, -0.5), alignment = Left |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
143 ) |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
144 discard textbuffer.add( |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
145 "Mutiline text\nCenter aligned\nCool!!", vec3(0, -0.5), alignment = Center |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
146 ) |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
147 discard textbuffer.add( |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
148 "Mutiline text\nRight aligned\nCool!!!", vec3(0.5, -0.5), alignment = Right |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
149 ) |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
150 |
|
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
151 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
|
152 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
|
153 let progress = ((getMonoTime() - start).inMilliseconds().int / 1000) / time |
|
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
154 if windowWasResized(): |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
155 textbuffer.refresh() |
|
1406
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
156 |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
157 withNextFrame(framebuffer, commandbuffer): |
|
1409
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
158 bindDescriptorSet(commandbuffer, font.descriptorSet, 3, pipeline) |
| 1332 | 159 withRenderPass( |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
160 renderPass, |
| 1332 | 161 framebuffer, |
| 162 commandbuffer, | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
163 frameWidth(), |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
164 frameHeight(), |
| 1332 | 165 vec4(0, 0, 0, 0), |
| 166 ): | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
167 withPipeline(commandbuffer, pipeline): |
|
1407
56f927b89716
did: finally got typography right, still improving text-rendering API to cache text parts
sam <sam@basx.dev>
parents:
1406
diff
changeset
|
168 renderTextBuffer(commandbuffer, pipeline, textbuffer) |
|
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
169 |
|
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
170 # cleanup |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
171 checkVkResult vkDeviceWaitIdle(engine().vulkan.device) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
172 destroyPipeline(pipeline) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
173 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
|
174 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
175 proc test_04_lots_of_texts(time: float32, renderPass: RenderPass) = |
|
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
|
176 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
|
177 var renderdata = initRenderData() |
|
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
178 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
179 var pipeline = createPipeline(GlyphShader[MAX_CODEPOINTS](), renderPass = renderPass) |
|
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
180 |
|
1409
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
181 font.upload(renderdata) |
|
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
182 font.addToPipeline(renderdata, pipeline) |
|
1407
56f927b89716
did: finally got typography right, still improving text-rendering API to cache text parts
sam <sam@basx.dev>
parents:
1406
diff
changeset
|
183 |
| 1410 | 184 var textbuffer = font.initTextBuffer(3000, renderdata, baseScale = 0.1) |
| 1327 | 185 |
|
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
186 for i in 0 ..< 1000: |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
187 discard textbuffer.add( |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
188 $i, |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
189 vec3(rand(-0.8 .. 0.8), rand(-0.8 .. 0.8), rand(0.1 .. 0.2)), |
|
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
190 color = |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
191 vec4(rand(0.5 .. 1.0), rand(0.5 .. 1.0), rand(0.5 .. 1.0), rand(0.5 .. 1.0)), |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
192 scale = rand(0.5'f32 .. 1.5'f32), |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
193 ) |
|
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
194 |
|
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
195 var start = getMonoTime() |
|
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
196 var last = start |
|
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
197 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
|
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
198 let n = getMonoTime() |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
199 echo (n - last).inMicroseconds() / 1000 |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
200 last = n |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
201 withNextFrame(framebuffer, commandbuffer): |
|
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
202 if windowWasResized(): |
|
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
203 textbuffer.refresh() |
|
1409
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
204 bindDescriptorSet(commandbuffer, font.descriptorSet, 3, pipeline) |
| 1332 | 205 withRenderPass( |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
206 renderPass, |
| 1332 | 207 framebuffer, |
| 208 commandbuffer, | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
209 frameWidth(), |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
210 frameHeight(), |
| 1332 | 211 vec4(0, 0, 0, 0), |
| 212 ): | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
213 withPipeline(commandbuffer, pipeline): |
|
1407
56f927b89716
did: finally got typography right, still improving text-rendering API to cache text parts
sam <sam@basx.dev>
parents:
1406
diff
changeset
|
214 renderTextBuffer(commandbuffer, pipeline, textbuffer) |
|
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
215 |
|
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
216 # cleanup |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
217 checkVkResult vkDeviceWaitIdle(engine().vulkan.device) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
218 destroyPipeline(pipeline) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
219 destroyRenderData(renderdata) |
|
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
220 |
| 1236 | 221 when isMainModule: |
|
1413
bc6782c0edd6
did: cleanup, wrong direction in z-buffer
sam <sam@basx.dev>
parents:
1410
diff
changeset
|
222 var time = 3'f32 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
223 initEngine("Test text") |
| 1236 | 224 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
225 # for depthBuffer in [true, false]: |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
226 var renderpass = createDirectPresentationRenderPass(depthBuffer = true) |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
227 setupSwapchain(renderpass = renderpass) |
| 1236 | 228 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
229 # tests a simple triangle with minimalistic shader and vertex format |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
230 test_01_static_label(time, renderpass) |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
231 test_02_multi_counter(time, renderpass) |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
232 test_03_layouting(time, renderpass) |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
233 test_04_lots_of_texts(time, renderpass) |
|
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
234 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
235 checkVkResult vkDeviceWaitIdle(engine().vulkan.device) |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
236 destroyRenderPass(renderpass) |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
237 clearSwapchain() |
| 1236 | 238 |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
239 destroyVulkan() |
