diff tests/test_rendering.nim @ 1203:6360c8d17ce0 compiletime-tests

did: preprations to add rendering tests
author sam <sam@basx.dev>
date Mon, 15 Jul 2024 20:06:42 +0700
parents
children e2901100a596
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_rendering.nim	Mon Jul 15 20:06:42 2024 +0700
@@ -0,0 +1,63 @@
+import std/options
+import ../semicongine
+
+var
+  mainRenderpass: VkRenderPass
+  swapchain: Swapchain
+
+proc test_01_gl_triangle() =
+  var renderdata = InitRenderData()
+
+  type
+    TrianglShader = object
+      position {.VertexAttribute.}: Vec3f
+      color {.VertexAttribute.}: Vec3f
+      fragmentColor {.Pass.}: Vec3f
+      outColor {.ShaderOutput.}: Vec4f
+      # code
+      vertexCode: string = """void main() {
+      fragmentColor = color;
+      gl_Position = vec4(position, 1);}"""
+      fragmentCode: string = """void main() {
+      outColor = vec4(fragmentColor, 1);}"""
+    TriangleMesh = object
+      position: GPUArray[Vec3f, VertexBuffer]
+      color: GPUArray[Vec3f, VertexBuffer]
+    Empty = object
+  var mesh = TriangleMesh(
+    position: asGPUArray([NewVec3f(-0.5, -0.5), NewVec3f(-0.5, 0.5), NewVec3f(0.5, -0.5)], VertexBuffer),
+    color: asGPUArray([NewVec3f(0, 0, 1), NewVec3f(0, 1, 0), NewVec3f(1, 0, 0)], VertexBuffer),
+  )
+
+  var
+    pipeline = CreatePipeline[TrianglShader](renderPass = mainRenderpass)
+    a, b: Empty
+
+  while UpdateInputs():
+    WithNextFrame(swapchain, framebuffer, commandbuffer):
+      WithRenderPass(mainRenderpass, framebuffer, commandbuffer, swapchain.width, swapchain.height, NewVec4f(0, 0, 0, 0)):
+        WithPipeline(commandbuffer, pipeline):
+          # WithBind(commandBuffer, a, b, pipeline, swapchain.currentFiF.int):
+            Render(
+              commandbuffer = commandbuffer,
+              pipeline = pipeline,
+              globalSet = a,
+              materialSet = b,
+              mesh = mesh,
+            )
+
+  # cleanup
+  DestroyPipeline(pipeline)
+  DestroyRenderData(renderdata)
+
+
+when isMainModule:
+  mainRenderpass = CreatePresentationRenderPass()
+  swapchain = InitSwapchain(renderpass = mainRenderpass).get()
+
+  test_01_gl_triangle()
+
+  checkVkResult vkDeviceWaitIdle(vulkan.device)
+  vkDestroyRenderPass(vulkan.device, mainRenderpass, nil)
+  DestroySwapchain(swapchain)
+  DestroyVulkan()