Mercurial > games > semicongine
comparison tests/test_text.nim @ 1408:17d960ff6a24
did: implement decent text rendering (I hope, we'll see)
author | sam <sam@basx.dev> |
---|---|
date | Sun, 22 Dec 2024 22:32:12 +0700 |
parents | 56f927b89716 |
children | 5a56f8ac328b |
comparison
equal
deleted
inserted
replaced
1407:56f927b89716 | 1408:17d960ff6a24 |
---|---|
26 assignBuffers(renderdata, textbuffer) | 26 assignBuffers(renderdata, textbuffer) |
27 assignBuffers(renderdata, font.descriptorSet) | 27 assignBuffers(renderdata, font.descriptorSet) |
28 uploadImages(renderdata, font.descriptorSet) | 28 uploadImages(renderdata, font.descriptorSet) |
29 initDescriptorSet(renderdata, pipeline.layout(0), font.descriptorSet) | 29 initDescriptorSet(renderdata, pipeline.layout(0), font.descriptorSet) |
30 | 30 |
31 discard textbuffer.add("Hello semicongine!", vec3()) | |
32 | |
31 var start = getMonoTime() | 33 var start = getMonoTime() |
32 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 34 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
33 let t = getMonoTime() | 35 let t = getMonoTime() |
34 textbuffer.reset() | 36 if windowWasResized(): |
35 textbuffer.add("Hello semicongine!", vec3(0.5, 0.5), anchor = vec2(0.5, 0.5)) | 37 textbuffer.refresh() |
36 textbuffer.updateAllGPUBuffers(flush = true) | |
37 | 38 |
38 withNextFrame(framebuffer, commandbuffer): | 39 withNextFrame(framebuffer, commandbuffer): |
39 bindDescriptorSet(commandbuffer, font.descriptorSet, 0, pipeline) | 40 bindDescriptorSet(commandbuffer, font.descriptorSet, 0, pipeline) |
40 withRenderPass( | 41 withRenderPass( |
41 vulkan.swapchain.renderPass, | 42 vulkan.swapchain.renderPass, |
79 | 80 |
80 assignBuffers(renderdata, textbuffer1) | 81 assignBuffers(renderdata, textbuffer1) |
81 assignBuffers(renderdata, textbuffer2) | 82 assignBuffers(renderdata, textbuffer2) |
82 assignBuffers(renderdata, textbuffer3) | 83 assignBuffers(renderdata, textbuffer3) |
83 | 84 |
84 var labels = [" 0", " 1", " 2"] | |
85 | |
86 var start = getMonoTime() | |
87 var p = 0 | 85 var p = 0 |
86 let l1 = textbuffer1.add($(p + 0), vec3(0.3, 0.5), capacity = 5) | |
87 let l2 = textbuffer2.add($(p + 1), vec3(0.5, 0.5), capacity = 5) | |
88 let l3 = textbuffer3.add($(p + 2), vec3(0.7, 0.5), capacity = 5) | |
89 | |
90 var start = getMonoTime() | |
88 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 91 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
89 let progress = ((getMonoTime() - start).inMilliseconds().int / 1000) / time | 92 let progress = ((getMonoTime() - start).inMilliseconds().int / 1000) / time |
90 textbuffer1.reset() | |
91 textbuffer2.reset() | |
92 textbuffer3.reset() | |
93 | |
94 textbuffer1.add($(p + 0), vec3(0.3, 0.5)) | |
95 textbuffer2.add($(p + 1), vec3(0.5, 0.5)) | |
96 textbuffer3.add($(p + 2), vec3(0.7, 0.5)) | |
97 | |
98 textbuffer1.updateAllGPUBuffers(flush = true) | |
99 textbuffer2.updateAllGPUBuffers(flush = true) | |
100 textbuffer3.updateAllGPUBuffers(flush = true) | |
101 | 93 |
102 inc p | 94 inc p |
95 | |
96 textbuffer1.text(l1, $(p + 0)) | |
97 textbuffer2.text(l2, $(p + 1)) | |
98 textbuffer3.text(l3, $(p + 2)) | |
99 | |
100 textbuffer1.refresh() | |
101 textbuffer2.refresh() | |
102 textbuffer3.refresh() | |
103 | |
103 withNextFrame(framebuffer, commandbuffer): | 104 withNextFrame(framebuffer, commandbuffer): |
104 withRenderPass( | 105 withRenderPass( |
105 vulkan.swapchain.renderPass, | 106 vulkan.swapchain.renderPass, |
106 framebuffer, | 107 framebuffer, |
107 commandbuffer, | 108 commandbuffer, |
135 initDescriptorSet(renderdata, pipeline.layout(0), font.descriptorSet) | 136 initDescriptorSet(renderdata, pipeline.layout(0), font.descriptorSet) |
136 | 137 |
137 var textbuffer = font.initTextBuffer(1000, baseScale = 0.1) | 138 var textbuffer = font.initTextBuffer(1000, baseScale = 0.1) |
138 assignBuffers(renderdata, textbuffer) | 139 assignBuffers(renderdata, textbuffer) |
139 | 140 |
141 discard textbuffer.add("Anchor at center", vec3(0, 0), anchor = vec2(0, 0)) | |
142 discard textbuffer.add("Anchor at top left`", vec3(-1, 1), anchor = vec2(-1, 1)) | |
143 discard textbuffer.add("Anchor at top right", vec3(1, 1), anchor = vec2(1, 1)) | |
144 discard textbuffer.add("Anchor at bottom left", vec3(-1, -1), anchor = vec2(-1, -1)) | |
145 discard textbuffer.add("Anchor at bottom right", vec3(1, -1), anchor = vec2(1, -1)) | |
146 | |
147 discard textbuffer.add( | |
148 "Mutiline text\nLeft aligned\nCool!", vec3(-0.5, -0.5), alignment = Left | |
149 ) | |
150 discard textbuffer.add( | |
151 "Mutiline text\nCenter aligned\nCool!!", vec3(0, -0.5), alignment = Center | |
152 ) | |
153 discard textbuffer.add( | |
154 "Mutiline text\nRight aligned\nCool!!!", vec3(0.5, -0.5), alignment = Right | |
155 ) | |
156 | |
140 var start = getMonoTime() | 157 var start = getMonoTime() |
141 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 158 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
142 let progress = ((getMonoTime() - start).inMilliseconds().int / 1000) / time | 159 let progress = ((getMonoTime() - start).inMilliseconds().int / 1000) / time |
143 | 160 if windowWasResized(): |
144 textbuffer.reset() | 161 textbuffer.refresh() |
145 textbuffer.add("Anchor at center", vec3(0, 0), anchor = vec2(0, 0)) | |
146 textbuffer.add("Anchor at top left`", vec3(-1, 1), anchor = vec2(-1, 1)) | |
147 textbuffer.add("Anchor at top right", vec3(1, 1), anchor = vec2(1, 1)) | |
148 textbuffer.add("Anchor at bottom left", vec3(-1, -1), anchor = vec2(-1, -1)) | |
149 textbuffer.add("Anchor at bottom right", vec3(1, -1), anchor = vec2(1, -1)) | |
150 | |
151 textbuffer.add( | |
152 "Mutiline text\nLeft aligned\nCool!", vec3(-0.5, -0.5), alignment = Left | |
153 ) | |
154 textbuffer.add( | |
155 "Mutiline text\nCenter aligned\nCool!!", vec3(0, -0.5), alignment = Center | |
156 ) | |
157 textbuffer.add( | |
158 "Mutiline text\nRight aligned\nCool!!!", vec3(0.5, -0.5), alignment = Right | |
159 ) | |
160 | |
161 textbuffer.updateAllGPUBuffers(flush = true) | |
162 | 162 |
163 withNextFrame(framebuffer, commandbuffer): | 163 withNextFrame(framebuffer, commandbuffer): |
164 bindDescriptorSet(commandbuffer, font.descriptorSet, 0, pipeline) | 164 bindDescriptorSet(commandbuffer, font.descriptorSet, 0, pipeline) |
165 withRenderPass( | 165 withRenderPass( |
166 vulkan.swapchain.renderPass, | 166 vulkan.swapchain.renderPass, |
188 | 188 |
189 assignBuffers(renderdata, font.descriptorSet) | 189 assignBuffers(renderdata, font.descriptorSet) |
190 uploadImages(renderdata, font.descriptorSet) | 190 uploadImages(renderdata, font.descriptorSet) |
191 initDescriptorSet(renderdata, pipeline.layout(0), font.descriptorSet) | 191 initDescriptorSet(renderdata, pipeline.layout(0), font.descriptorSet) |
192 | 192 |
193 var textbuffer = font.initTextBuffer(1000, baseScale = 0.1) | 193 var textbuffer = font.initTextBuffer(3000, baseScale = 0.1) |
194 assignBuffers(renderdata, textbuffer) | 194 assignBuffers(renderdata, textbuffer) |
195 | 195 |
196 var labels: seq[Textbox] | 196 for i in 0 ..< 1000: |
197 var positions = newSeq[Vec3f](100) | 197 discard textbuffer.add( |
198 var colors = newSeq[Vec4f](100) | 198 $i, |
199 var scales = newSeq[Vec2f](100) | 199 vec3(rand(-0.8 .. 0.8), rand(-0.8 .. 0.8), rand(-0.1 .. 0.1)), |
200 for i in 0 ..< 100: | 200 color = |
201 positions[i] = vec3(rand(-0.5 .. 0.5), rand(-0.5 .. 0.5), rand(-0.1 .. 0.1)) | 201 vec4(rand(0.5 .. 1.0), rand(0.5 .. 1.0), rand(0.5 .. 1.0), rand(0.5 .. 1.0)), |
202 colors[i] = | 202 scale = rand(0.5'f32 .. 1.5'f32), |
203 vec4(rand(0.5 .. 1.0), rand(0.5 .. 1.0), rand(0.5 .. 1.0), rand(0.5 .. 1.0)) | 203 ) |
204 scales[i] = vec2(rand(0.5'f32 .. 1.5'f32), rand(0.5'f32 .. 1.5'f32)) | 204 |
205 labels.add initTextbox(renderdata, pipeline.layout(0), font, 0.001, $i) | 205 var start = getMonoTime() |
206 | 206 var last = start |
207 var start = getMonoTime() | 207 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
208 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 208 let n = getMonoTime() |
209 textbuffer.reset() | 209 echo (n - last).inMicroseconds() / 1000 |
210 withNextFrame(framebuffer, commandbuffer): | 210 last = n |
211 withNextFrame(framebuffer, commandbuffer): | |
212 if windowWasResized(): | |
213 textbuffer.refresh() | |
211 bindDescriptorSet(commandbuffer, font.descriptorSet, 0, pipeline) | 214 bindDescriptorSet(commandbuffer, font.descriptorSet, 0, pipeline) |
212 withRenderPass( | 215 withRenderPass( |
213 vulkan.swapchain.renderPass, | 216 vulkan.swapchain.renderPass, |
214 framebuffer, | 217 framebuffer, |
215 commandbuffer, | 218 commandbuffer, |
224 checkVkResult vkDeviceWaitIdle(vulkan.device) | 227 checkVkResult vkDeviceWaitIdle(vulkan.device) |
225 destroyPipeline(pipeline) | 228 destroyPipeline(pipeline) |
226 destroyRenderData(renderdata) | 229 destroyRenderData(renderdata) |
227 | 230 |
228 when isMainModule: | 231 when isMainModule: |
229 var time = 100'f32 | 232 var time = 1'f32 |
230 initVulkan() | 233 initVulkan() |
231 | 234 |
232 for depthBuffer in [true, false]: | 235 for depthBuffer in [true, false]: |
233 var renderpass = createDirectPresentationRenderPass(depthBuffer = depthBuffer) | 236 var renderpass = createDirectPresentationRenderPass(depthBuffer = depthBuffer) |
234 setupSwapchain(renderpass = renderpass) | 237 setupSwapchain(renderpass = renderpass) |
235 | 238 |
236 # tests a simple triangle with minimalistic shader and vertex format | 239 # tests a simple triangle with minimalistic shader and vertex format |
237 # test_01_static_label(time) | 240 test_01_static_label(time) |
238 # test_02_multi_counter(time) | 241 test_02_multi_counter(time) |
239 test_03_layouting(time) | 242 test_03_layouting(time) |
240 # test_04_lots_of_texts(time) | 243 test_04_lots_of_texts(time) |
241 | 244 |
242 checkVkResult vkDeviceWaitIdle(vulkan.device) | 245 checkVkResult vkDeviceWaitIdle(vulkan.device) |
243 vkDestroyRenderPass(vulkan.device, renderpass.vk, nil) | 246 vkDestroyRenderPass(vulkan.device, renderpass.vk, nil) |
244 clearSwapchain() | 247 clearSwapchain() |
245 | 248 |