diff tests/test_text.nim @ 1423:3b8a736c45a7

did: put almost all global state into a single struct
author sam <sam@basx.dev>
date Thu, 09 Jan 2025 23:03:47 +0700
parents 5e5a3311ca44
children 676fc13685a9
line wrap: on
line diff
--- a/tests/test_text.nim	Thu Jan 09 01:03:06 2025 +0700
+++ b/tests/test_text.nim	Thu Jan 09 23:03:47 2025 +0700
@@ -15,12 +15,10 @@
 const FONTNAME = "Overhaul.ttf"
 # const FONTNAME = "DejaVuSans.ttf"
 
-proc test_01_static_label(time: float32) =
+proc test_01_static_label(time: float32, renderPass: RenderPass) =
   var font = loadFont[MAX_CODEPOINTS](FONTNAME, lineHeightPixels = 200)
   var renderdata = initRenderData()
-  var pipeline = createPipeline(
-    GlyphShader[MAX_CODEPOINTS](), renderPass = vulkan.swapchain.renderPass
-  )
+  var pipeline = createPipeline(GlyphShader[MAX_CODEPOINTS](), renderPass = renderPass)
   var textbuffer = font.initTextBuffer(1000, renderdata, baseScale = 0.1)
 
   font.upload(renderdata)
@@ -29,11 +27,11 @@
   # small drop-shadow
   discard textbuffer.add(
     "Hello semicongine!",
-    vec3(0.009, -0.009 * getAspectRatio(), 0.002),
+    vec3(0.009, -0.009 * getAspectRatio(), 0.2),
     color = vec4(0.02, 0.02, 0.02, 1),
     scale = 1.01,
   )
-  discard textbuffer.add("Hello semicongine!", vec3(0, 0, 0))
+  discard textbuffer.add("Hello semicongine!", vec3(0, 0, 0.1))
 
   var start = getMonoTime()
   while ((getMonoTime() - start).inMilliseconds().int / 1000) < time:
@@ -44,30 +42,28 @@
     withNextFrame(framebuffer, commandbuffer):
       font.bindTo(pipeline, commandbuffer)
       withRenderPass(
-        vulkan.swapchain.renderPass,
+        renderPass,
         framebuffer,
         commandbuffer,
-        vulkan.swapchain.width,
-        vulkan.swapchain.height,
+        frameWidth(),
+        frameHeight(),
         vec4(0, 0, 0, 0),
       ):
         withPipeline(commandbuffer, pipeline):
           renderTextBuffer(commandbuffer, pipeline, textbuffer)
 
   # cleanup
-  checkVkResult vkDeviceWaitIdle(vulkan.device)
+  checkVkResult vkDeviceWaitIdle(engine().vulkan.device)
   destroyPipeline(pipeline)
   destroyRenderData(renderdata)
 
-proc test_02_multi_counter(time: float32) =
+proc test_02_multi_counter(time: float32, renderPass: RenderPass) =
   var font1 = loadFont[MAX_CODEPOINTS]("Overhaul.ttf", lineHeightPixels = 40)
   var font2 = loadFont[MAX_CODEPOINTS]("Overhaul.ttf", lineHeightPixels = 160)
   var font3 = loadFont[MAX_CODEPOINTS]("DejaVuSans.ttf", lineHeightPixels = 160)
   var renderdata = initRenderData()
 
-  var pipeline = createPipeline(
-    GlyphShader[MAX_CODEPOINTS](), renderPass = vulkan.swapchain.renderPass
-  )
+  var pipeline = createPipeline(GlyphShader[MAX_CODEPOINTS](), renderPass = renderPass)
 
   font1.upload(renderdata)
   font2.upload(renderdata)
@@ -101,11 +97,11 @@
 
     withNextFrame(framebuffer, commandbuffer):
       withRenderPass(
-        vulkan.swapchain.renderPass,
+        renderPass,
         framebuffer,
         commandbuffer,
-        vulkan.swapchain.width,
-        vulkan.swapchain.height,
+        frameWidth(),
+        frameHeight(),
         vec4(0, 0, 0, 0),
       ):
         withPipeline(commandbuffer, pipeline):
@@ -117,17 +113,15 @@
           renderTextBuffer(commandbuffer, pipeline, textbuffer3)
 
       # cleanup
-  checkVkResult vkDeviceWaitIdle(vulkan.device)
+  checkVkResult vkDeviceWaitIdle(engine().vulkan.device)
   destroyPipeline(pipeline)
   destroyRenderData(renderdata)
 
-proc test_03_layouting(time: float32) =
+proc test_03_layouting(time: float32, renderPass: RenderPass) =
   var font = loadFont[MAX_CODEPOINTS]("DejaVuSans.ttf", lineHeightPixels = 160)
   var renderdata = initRenderData()
 
-  var pipeline = createPipeline(
-    GlyphShader[MAX_CODEPOINTS](), renderPass = vulkan.swapchain.renderPass
-  )
+  var pipeline = createPipeline(GlyphShader[MAX_CODEPOINTS](), renderPass = renderPass)
 
   font.upload(renderdata)
   font.addToPipeline(renderdata, pipeline)
@@ -159,28 +153,26 @@
     withNextFrame(framebuffer, commandbuffer):
       bindDescriptorSet(commandbuffer, font.descriptorSet, 3, pipeline)
       withRenderPass(
-        vulkan.swapchain.renderPass,
+        renderPass,
         framebuffer,
         commandbuffer,
-        vulkan.swapchain.width,
-        vulkan.swapchain.height,
+        frameWidth(),
+        frameHeight(),
         vec4(0, 0, 0, 0),
       ):
         withPipeline(commandbuffer, pipeline):
           renderTextBuffer(commandbuffer, pipeline, textbuffer)
 
       # cleanup
-  checkVkResult vkDeviceWaitIdle(vulkan.device)
+  checkVkResult vkDeviceWaitIdle(engine().vulkan.device)
   destroyPipeline(pipeline)
   destroyRenderData(renderdata)
 
-proc test_04_lots_of_texts(time: float32) =
+proc test_04_lots_of_texts(time: float32, renderPass: RenderPass) =
   var font = loadFont[MAX_CODEPOINTS]("DejaVuSans.ttf", lineHeightPixels = 160)
   var renderdata = initRenderData()
 
-  var pipeline = createPipeline(
-    GlyphShader[MAX_CODEPOINTS](), renderPass = vulkan.swapchain.renderPass
-  )
+  var pipeline = createPipeline(GlyphShader[MAX_CODEPOINTS](), renderPass = renderPass)
 
   font.upload(renderdata)
   font.addToPipeline(renderdata, pipeline)
@@ -190,7 +182,7 @@
   for i in 0 ..< 1000:
     discard textbuffer.add(
       $i,
-      vec3(rand(-0.8 .. 0.8), rand(-0.8 .. 0.8), rand(-0.1 .. 0.1)),
+      vec3(rand(-0.8 .. 0.8), rand(-0.8 .. 0.8), rand(0.1 .. 0.2)),
       color =
         vec4(rand(0.5 .. 1.0), rand(0.5 .. 1.0), rand(0.5 .. 1.0), rand(0.5 .. 1.0)),
       scale = rand(0.5'f32 .. 1.5'f32),
@@ -207,37 +199,37 @@
         textbuffer.refresh()
       bindDescriptorSet(commandbuffer, font.descriptorSet, 3, pipeline)
       withRenderPass(
-        vulkan.swapchain.renderPass,
+        renderPass,
         framebuffer,
         commandbuffer,
-        vulkan.swapchain.width,
-        vulkan.swapchain.height,
+        frameWidth(),
+        frameHeight(),
         vec4(0, 0, 0, 0),
       ):
         withPipeline(commandbuffer, pipeline):
           renderTextBuffer(commandbuffer, pipeline, textbuffer)
 
         # cleanup
-  checkVkResult vkDeviceWaitIdle(vulkan.device)
+  checkVkResult vkDeviceWaitIdle(engine().vulkan.device)
   destroyPipeline(pipeline)
   destroyRenderData(renderdata)
 
 when isMainModule:
   var time = 3'f32
-  initVulkan()
+  initEngine("Test text")
 
-  for depthBuffer in [true, false]:
-    var renderpass = createDirectPresentationRenderPass(depthBuffer = depthBuffer)
-    setupSwapchain(renderpass = renderpass)
+  # for depthBuffer in [true, false]:
+  var renderpass = createDirectPresentationRenderPass(depthBuffer = true)
+  setupSwapchain(renderpass = renderpass)
 
-    # tests a simple triangle with minimalistic shader and vertex format
-    test_01_static_label(time)
-    test_02_multi_counter(time)
-    test_03_layouting(time)
-    test_04_lots_of_texts(time)
+  # tests a simple triangle with minimalistic shader and vertex format
+  test_01_static_label(time, renderpass)
+  test_02_multi_counter(time, renderpass)
+  test_03_layouting(time, renderpass)
+  test_04_lots_of_texts(time, renderpass)
 
-    checkVkResult vkDeviceWaitIdle(vulkan.device)
-    vkDestroyRenderPass(vulkan.device, renderpass.vk, nil)
-    clearSwapchain()
+  checkVkResult vkDeviceWaitIdle(engine().vulkan.device)
+  destroyRenderPass(renderpass)
+  clearSwapchain()
 
   destroyVulkan()