Mercurial > games > semicongine
annotate tests/test_text.nim @ 1409:5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
author | sam <sam@basx.dev> |
---|---|
date | Mon, 23 Dec 2024 00:32:07 +0700 |
parents | 17d960ff6a24 |
children | 99d5b42cf32d |
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 ) |
1407
56f927b89716
did: finally got typography right, still improving text-rendering API to cache text parts
sam <sam@basx.dev>
parents:
1406
diff
changeset
|
24 var textbuffer = font.initTextBuffer(1000, baseScale = 0.1) |
1409
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
25 assignBuffers(renderdata, textbuffer) |
1374 | 26 |
1409
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
27 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
|
28 font.addToPipeline(renderdata, pipeline) |
1399 | 29 |
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
30 discard textbuffer.add("Hello semicongine!", vec3()) |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
31 |
1374 | 32 var start = getMonoTime() |
33 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
|
34 let t = getMonoTime() |
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
35 if windowWasResized(): |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
36 textbuffer.refresh() |
1400
20602878744e
did: finished basic implementation of new glyph-rendering system
sam <sam@basx.dev>
parents:
1399
diff
changeset
|
37 |
1374 | 38 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
|
39 font.bindTo(pipeline, commandbuffer) |
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): | |
1407
56f927b89716
did: finally got typography right, still improving text-rendering API to cache text parts
sam <sam@basx.dev>
parents:
1406
diff
changeset
|
49 renderTextBuffer(commandbuffer, pipeline, textbuffer) |
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 |
1409
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
66 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
|
67 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
|
68 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
|
69 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
|
70 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
|
71 font3.addToPipeline(renderdata, pipeline) |
1327 | 72 |
1407
56f927b89716
did: finally got typography right, still improving text-rendering API to cache text parts
sam <sam@basx.dev>
parents:
1406
diff
changeset
|
73 var textbuffer1 = font1.initTextBuffer(10, baseScale = 0.1) |
56f927b89716
did: finally got typography right, still improving text-rendering API to cache text parts
sam <sam@basx.dev>
parents:
1406
diff
changeset
|
74 var textbuffer2 = font2.initTextBuffer(10, baseScale = 0.1) |
56f927b89716
did: finally got typography right, still improving text-rendering API to cache text parts
sam <sam@basx.dev>
parents:
1406
diff
changeset
|
75 var textbuffer3 = font3.initTextBuffer(10, baseScale = 0.1) |
1327 | 76 |
1407
56f927b89716
did: finally got typography right, still improving text-rendering API to cache text parts
sam <sam@basx.dev>
parents:
1406
diff
changeset
|
77 assignBuffers(renderdata, textbuffer1) |
56f927b89716
did: finally got typography right, still improving text-rendering API to cache text parts
sam <sam@basx.dev>
parents:
1406
diff
changeset
|
78 assignBuffers(renderdata, textbuffer2) |
56f927b89716
did: finally got typography right, still improving text-rendering API to cache text parts
sam <sam@basx.dev>
parents:
1406
diff
changeset
|
79 assignBuffers(renderdata, textbuffer3) |
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 |
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
81 var p = 0 |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
82 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
|
83 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
|
84 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
|
85 |
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
86 var start = getMonoTime() |
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
87 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
88 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
|
89 |
1238
03634915bbdb
add: tests for updating texts, does not pass validation atm
sam <sam@basx.dev>
parents:
1237
diff
changeset
|
90 inc p |
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
91 |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
92 textbuffer1.text(l1, $(p + 0)) |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
93 textbuffer2.text(l2, $(p + 1)) |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
94 textbuffer3.text(l3, $(p + 2)) |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
95 |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
96 textbuffer1.refresh() |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
97 textbuffer2.refresh() |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
98 textbuffer3.refresh() |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
99 |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
100 withNextFrame(framebuffer, commandbuffer): |
1332 | 101 withRenderPass( |
102 vulkan.swapchain.renderPass, | |
103 framebuffer, | |
104 commandbuffer, | |
105 vulkan.swapchain.width, | |
106 vulkan.swapchain.height, | |
107 vec4(0, 0, 0, 0), | |
108 ): | |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
109 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
|
110 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
|
111 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
|
112 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
|
113 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
|
114 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
|
115 renderTextBuffer(commandbuffer, pipeline, textbuffer3) |
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
116 |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
117 # cleanup |
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
118 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
|
119 destroyPipeline(pipeline) |
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
120 destroyRenderData(renderdata) |
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
121 |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
122 proc test_03_layouting(time: float32) = |
1406
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
123 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
|
124 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
|
125 |
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
|
126 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
|
127 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
|
128 ) |
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 |
1407
56f927b89716
did: finally got typography right, still improving text-rendering API to cache text parts
sam <sam@basx.dev>
parents:
1406
diff
changeset
|
133 var textbuffer = font.initTextBuffer(1000, baseScale = 0.1) |
56f927b89716
did: finally got typography right, still improving text-rendering API to cache text parts
sam <sam@basx.dev>
parents:
1406
diff
changeset
|
134 assignBuffers(renderdata, textbuffer) |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
135 |
1408
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 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
|
137 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
|
138 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
|
139 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
|
140 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
|
141 |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
142 discard textbuffer.add( |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
143 "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
|
144 ) |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
145 discard textbuffer.add( |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
146 "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
|
147 ) |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
148 discard textbuffer.add( |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
149 "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
|
150 ) |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
151 |
1239
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
152 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
|
153 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
|
154 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
|
155 if windowWasResized(): |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
156 textbuffer.refresh() |
1406
aeb15aa9768c
did: continue text layout, improve vector api
sam <sam@basx.dev>
parents:
1405
diff
changeset
|
157 |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
158 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
|
159 bindDescriptorSet(commandbuffer, font.descriptorSet, 3, pipeline) |
1332 | 160 withRenderPass( |
161 vulkan.swapchain.renderPass, | |
162 framebuffer, | |
163 commandbuffer, | |
164 vulkan.swapchain.width, | |
165 vulkan.swapchain.height, | |
166 vec4(0, 0, 0, 0), | |
167 ): | |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
168 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
|
169 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
|
170 |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
171 # cleanup |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
172 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
|
173 destroyPipeline(pipeline) |
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
174 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
|
175 |
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
sam <sam@basx.dev>
parents:
1238
diff
changeset
|
176 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
|
177 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
|
178 var renderdata = initRenderData() |
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
179 |
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
|
180 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
|
181 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
|
182 ) |
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
183 |
1409
5a56f8ac328b
did: improve descriptor-set handling + last fixes for new font/text rendering api
sam <sam@basx.dev>
parents:
1408
diff
changeset
|
184 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
|
185 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
|
186 |
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
187 var textbuffer = font.initTextBuffer(3000, baseScale = 0.1) |
1407
56f927b89716
did: finally got typography right, still improving text-rendering API to cache text parts
sam <sam@basx.dev>
parents:
1406
diff
changeset
|
188 assignBuffers(renderdata, textbuffer) |
1327 | 189 |
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
190 for i in 0 ..< 1000: |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
191 discard textbuffer.add( |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
192 $i, |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
193 vec3(rand(-0.8 .. 0.8), rand(-0.8 .. 0.8), rand(-0.1 .. 0.1)), |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
194 color = |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
195 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
|
196 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
|
197 ) |
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
198 |
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
199 var start = getMonoTime() |
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
200 var last = start |
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
201 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
|
202 let n = getMonoTime() |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
203 echo (n - last).inMicroseconds() / 1000 |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
204 last = n |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
205 withNextFrame(framebuffer, commandbuffer): |
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
206 if windowWasResized(): |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
207 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
|
208 bindDescriptorSet(commandbuffer, font.descriptorSet, 3, pipeline) |
1332 | 209 withRenderPass( |
210 vulkan.swapchain.renderPass, | |
211 framebuffer, | |
212 commandbuffer, | |
213 vulkan.swapchain.width, | |
214 vulkan.swapchain.height, | |
215 vec4(0, 0, 0, 0), | |
216 ): | |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
217 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
|
218 renderTextBuffer(commandbuffer, pipeline, textbuffer) |
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
219 |
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
220 # cleanup |
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
221 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
|
222 destroyPipeline(pipeline) |
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
223 destroyRenderData(renderdata) |
1237
97813ac43cfb
add: multi-text with all properties animated
sam <sam@basx.dev>
parents:
1236
diff
changeset
|
224 |
1236 | 225 when isMainModule: |
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
226 var time = 1'f32 |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
227 initVulkan() |
1236 | 228 |
1241
a0ed1a918fda
fix: letters sometimes overlapping other letters quad
sam <sam@basx.dev>
parents:
1240
diff
changeset
|
229 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
|
230 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
|
231 setupSwapchain(renderpass = renderpass) |
1236 | 232 |
1241
a0ed1a918fda
fix: letters sometimes overlapping other letters quad
sam <sam@basx.dev>
parents:
1240
diff
changeset
|
233 # tests a simple triangle with minimalistic shader and vertex format |
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
234 test_01_static_label(time) |
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
235 test_02_multi_counter(time) |
1405 | 236 test_03_layouting(time) |
1408
17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
sam <sam@basx.dev>
parents:
1407
diff
changeset
|
237 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
|
238 |
1241
a0ed1a918fda
fix: letters sometimes overlapping other letters quad
sam <sam@basx.dev>
parents:
1240
diff
changeset
|
239 checkVkResult vkDeviceWaitIdle(vulkan.device) |
a0ed1a918fda
fix: letters sometimes overlapping other letters quad
sam <sam@basx.dev>
parents:
1240
diff
changeset
|
240 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
|
241 clearSwapchain() |
1236 | 242 |
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1282
diff
changeset
|
243 destroyVulkan() |