Mercurial > games > semicongine
comparison tests/test_text.nim @ 1381:c8d1b87cf6c8
did: make progress on new glyph-rendering system
author | sam <sam@basx.dev> |
---|---|
date | Thu, 12 Dec 2024 23:54:49 +0700 |
parents | 4aa9e703af48 |
children | ec9f19151d44 |
comparison
equal
deleted
inserted
replaced
1380:4aa9e703af48 | 1381:c8d1b87cf6c8 |
---|---|
2 import std/algorithm | 2 import std/algorithm |
3 import std/strutils | 3 import std/strutils |
4 import std/sequtils | 4 import std/sequtils |
5 import std/monotimes | 5 import std/monotimes |
6 import std/times | 6 import std/times |
7 import std/tables | |
7 import std/options | 8 import std/options |
8 import std/random | 9 import std/random |
10 import std/unicode | |
9 | 11 |
10 import ../semicongine | 12 import ../semicongine |
11 | 13 |
12 type FontDS = object | 14 type FontDS = object |
13 fontAtlas: Image[Gray] | 15 fontAtlas: Image[Gray] |
14 | 16 |
15 type EMPTY = object | 17 type EMPTY = object |
16 | 18 |
19 const N_GLYPHS = 200 | |
17 proc test_01_static_label_new(time: float32) = | 20 proc test_01_static_label_new(time: float32) = |
18 var font = loadFont("Overhaul.ttf", lineHeightPixels = 160) | 21 var font = loadFont("Overhaul.ttf", lineHeightPixels = 160) |
19 var renderdata = initRenderData() | 22 var renderdata = initRenderData() |
20 var pipeline = | 23 var pipeline = |
21 createPipeline[GlyphShader[200]](renderPass = vulkan.swapchain.renderPass) | 24 createPipeline[GlyphShader[N_GLYPHS]](renderPass = vulkan.swapchain.renderPass) |
25 var (ds, glyphtable) = glyphDescriptorSet(font, N_GLYPHS) | |
22 var glyphs = Glyphs( | 26 var glyphs = Glyphs( |
23 position: asGPUArray([vec3()], VertexBufferMapped), | 27 position: asGPUArray([vec3(), vec3()], VertexBufferMapped), |
24 scale: asGPUArray([1'f32], VertexBufferMapped), | 28 scale: asGPUArray([1'f32, 1'f32], VertexBufferMapped), |
25 color: asGPUArray([vec4(1, 1, 1, 1)], VertexBufferMapped), | 29 color: asGPUArray([vec4(1, 1, 1, 1), vec4(1, 1, 1, 1)], VertexBufferMapped), |
26 glyphIndex: asGPUArray([0'u16], VertexBufferMapped), | 30 glyphIndex: |
31 asGPUArray([glyphtable[Rune('Q')], glyphtable[Rune('H')]], VertexBufferMapped), | |
27 ) | 32 ) |
28 | 33 |
29 var ds = | |
30 asDescriptorSetData(GlyphDescriptorSet[200](fontAtlas: font.fontAtlas.copy())) | |
31 assignBuffers(renderdata, glyphs) | 34 assignBuffers(renderdata, glyphs) |
32 assignBuffers(renderdata, ds) | 35 assignBuffers(renderdata, ds) |
33 uploadImages(renderdata, ds) | 36 uploadImages(renderdata, ds) |
34 initDescriptorSet(renderdata, pipeline.layout(0), ds) | 37 initDescriptorSet(renderdata, pipeline.layout(0), ds) |
35 | 38 |
280 checkVkResult vkDeviceWaitIdle(vulkan.device) | 283 checkVkResult vkDeviceWaitIdle(vulkan.device) |
281 destroyPipeline(pipeline) | 284 destroyPipeline(pipeline) |
282 destroyRenderData(renderdata) | 285 destroyRenderData(renderdata) |
283 | 286 |
284 when isMainModule: | 287 when isMainModule: |
285 var time = 1'f32 | 288 var time = 1000'f32 |
286 initVulkan() | 289 initVulkan() |
287 | 290 |
288 for depthBuffer in [true, false]: | 291 for depthBuffer in [true, false]: |
289 var renderpass = createDirectPresentationRenderPass(depthBuffer = depthBuffer) | 292 var renderpass = createDirectPresentationRenderPass(depthBuffer = depthBuffer) |
290 setupSwapchain(renderpass = renderpass) | 293 setupSwapchain(renderpass = renderpass) |