Mercurial > games > semicongine
comparison tests/test_text.nim @ 1380:4aa9e703af48
did: merge shit?
author | sam <sam@basx.dev> |
---|---|
date | Thu, 12 Dec 2024 21:35:34 +0700 |
parents | 31f57a969ffd 9ca552dad5fc |
children | c8d1b87cf6c8 |
comparison
equal
deleted
inserted
replaced
1378:31f57a969ffd | 1380:4aa9e703af48 |
---|---|
10 import ../semicongine | 10 import ../semicongine |
11 | 11 |
12 type FontDS = object | 12 type FontDS = object |
13 fontAtlas: Image[Gray] | 13 fontAtlas: Image[Gray] |
14 | 14 |
15 type EMPTY = object | |
16 | |
17 proc test_01_static_label_new(time: float32) = | |
18 var font = loadFont("Overhaul.ttf", lineHeightPixels = 160) | |
19 var renderdata = initRenderData() | |
20 var pipeline = | |
21 createPipeline[GlyphShader[200]](renderPass = vulkan.swapchain.renderPass) | |
22 var glyphs = Glyphs( | |
23 position: asGPUArray([vec3()], VertexBufferMapped), | |
24 scale: asGPUArray([1'f32], VertexBufferMapped), | |
25 color: asGPUArray([vec4(1, 1, 1, 1)], VertexBufferMapped), | |
26 glyphIndex: asGPUArray([0'u16], VertexBufferMapped), | |
27 ) | |
28 | |
29 var ds = | |
30 asDescriptorSetData(GlyphDescriptorSet[200](fontAtlas: font.fontAtlas.copy())) | |
31 assignBuffers(renderdata, glyphs) | |
32 assignBuffers(renderdata, ds) | |
33 uploadImages(renderdata, ds) | |
34 initDescriptorSet(renderdata, pipeline.layout(0), ds) | |
35 | |
36 var start = getMonoTime() | |
37 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | |
38 withNextFrame(framebuffer, commandbuffer): | |
39 bindDescriptorSet(commandbuffer, ds, 0, pipeline) | |
40 withRenderPass( | |
41 vulkan.swapchain.renderPass, | |
42 framebuffer, | |
43 commandbuffer, | |
44 vulkan.swapchain.width, | |
45 vulkan.swapchain.height, | |
46 vec4(0, 0, 0, 0), | |
47 ): | |
48 withPipeline(commandbuffer, pipeline): | |
49 render(commandbuffer, pipeline, EMPTY(), glyphs, fixedVertexCount = 6) | |
50 | |
51 # cleanup | |
52 checkVkResult vkDeviceWaitIdle(vulkan.device) | |
53 destroyPipeline(pipeline) | |
54 destroyRenderData(renderdata) | |
55 | |
15 proc test_01_static_label(time: float32) = | 56 proc test_01_static_label(time: float32) = |
16 var font = loadFont("Overhaul.ttf", lineHeightPixels = 160) | 57 var font = loadFont("Overhaul.ttf", lineHeightPixels = 160) |
17 var renderdata = initRenderData() | 58 var renderdata = initRenderData() |
18 var pipeline = | 59 var pipeline = |
19 createPipeline[DefaultFontShader[FontDS]](renderPass = vulkan.swapchain.renderPass) | 60 createPipeline[DefaultFontShader[FontDS]](renderPass = vulkan.swapchain.renderPass) |
38 vulkan.swapchain.height, | 79 vulkan.swapchain.height, |
39 vec4(0, 0, 0, 0), | 80 vec4(0, 0, 0, 0), |
40 ): | 81 ): |
41 withPipeline(commandbuffer, pipeline): | 82 withPipeline(commandbuffer, pipeline): |
42 render(commandbuffer, pipeline, label1, vec3(), vec4(1, 1, 1, 1)) | 83 render(commandbuffer, pipeline, label1, vec3(), vec4(1, 1, 1, 1)) |
43 | |
44 # cleanup | 84 # cleanup |
45 checkVkResult vkDeviceWaitIdle(vulkan.device) | 85 checkVkResult vkDeviceWaitIdle(vulkan.device) |
46 destroyPipeline(pipeline) | 86 destroyPipeline(pipeline) |
47 destroyRenderData(renderdata) | 87 destroyRenderData(renderdata) |
48 | |
49 #[ | |
50 proc test_01_static_label_new(time: float32) = | |
51 var font = loadFont("Overhaul.ttf", lineHeightPixels = 160) | |
52 var renderdata = initRenderData() | |
53 var pipeline = | |
54 createPipeline[DefaultFontShader[FontDS]](renderPass = vulkan.swapchain.renderPass) | |
55 | |
56 var ds = asDescriptorSetData(FontDS(fontAtlas: font.fontAtlas.copy())) | |
57 uploadImages(renderdata, ds) | |
58 initDescriptorSet(renderdata, pipeline.layout(0), ds) | |
59 | |
60 var label1 = | |
61 initTextbox(renderdata, pipeline.layout(0), font, 0.0005, "Hello semicongine!") | |
62 | |
63 var start = getMonoTime() | |
64 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | |
65 label1.refresh() | |
66 withNextFrame(framebuffer, commandbuffer): | |
67 bindDescriptorSet(commandbuffer, ds, 0, pipeline) | |
68 withRenderPass( | |
69 vulkan.swapchain.renderPass, | |
70 framebuffer, | |
71 commandbuffer, | |
72 vulkan.swapchain.width, | |
73 vulkan.swapchain.height, | |
74 vec4(0, 0, 0, 0), | |
75 ): | |
76 withPipeline(commandbuffer, pipeline): | |
77 proc render( | |
78 commandBuffer = commandbuffer, | |
79 pipeline = pipeline, | |
80 mesh: TMesh, | |
81 instances: TInstance, | |
82 fixedVertexCount = -1, | |
83 fixedInstanceCount = -1, | |
84 ) | |
85 | |
86 # cleanup | |
87 checkVkResult vkDeviceWaitIdle(vulkan.device) | |
88 destroyPipeline(pipeline) | |
89 destroyRenderData(renderdata) | |
90 ]# | |
91 | 88 |
92 proc test_02_multiple_animated(time: float32) = | 89 proc test_02_multiple_animated(time: float32) = |
93 var font1 = loadFont("Overhaul.ttf", lineHeightPixels = 40) | 90 var font1 = loadFont("Overhaul.ttf", lineHeightPixels = 40) |
94 var font2 = loadFont("Overhaul.ttf", lineHeightPixels = 160) | 91 var font2 = loadFont("Overhaul.ttf", lineHeightPixels = 160) |
95 var font3 = loadFont("DejaVuSans.ttf", lineHeightPixels = 160) | 92 var font3 = loadFont("DejaVuSans.ttf", lineHeightPixels = 160) |
291 for depthBuffer in [true, false]: | 288 for depthBuffer in [true, false]: |
292 var renderpass = createDirectPresentationRenderPass(depthBuffer = depthBuffer) | 289 var renderpass = createDirectPresentationRenderPass(depthBuffer = depthBuffer) |
293 setupSwapchain(renderpass = renderpass) | 290 setupSwapchain(renderpass = renderpass) |
294 | 291 |
295 # tests a simple triangle with minimalistic shader and vertex format | 292 # tests a simple triangle with minimalistic shader and vertex format |
296 # test_01_static_label_new(time) | 293 test_01_static_label_new(time) |
297 test_01_static_label(time) | 294 # test_01_static_label(time) |
298 test_02_multiple_animated(time) | 295 # test_02_multiple_animated(time) |
299 test_03_layouting(time) | 296 # test_03_layouting(time) |
300 test_04_lots_of_texts(time) | 297 # test_04_lots_of_texts(time) |
301 | 298 |
302 checkVkResult vkDeviceWaitIdle(vulkan.device) | 299 checkVkResult vkDeviceWaitIdle(vulkan.device) |
303 vkDestroyRenderPass(vulkan.device, renderpass.vk, nil) | 300 vkDestroyRenderPass(vulkan.device, renderpass.vk, nil) |
304 clearSwapchain() | 301 clearSwapchain() |
305 | 302 |