Mercurial > games > semicongine
comparison tests/test_vulkan_wrapper.nim @ 572:9f1de117aaca
did: allow runtime shader-input definitions
| author | Sam <sam@basx.dev> |
|---|---|
| date | Fri, 31 Mar 2023 16:00:16 +0700 |
| parents | 1cf928eb0a10 |
| children | 0c5a74885796 |
comparison
equal
deleted
inserted
replaced
| 571:b731816cfa5e | 572:9f1de117aaca |
|---|---|
| 1 import std/os | |
| 1 import std/options | 2 import std/options |
| 2 | 3 |
| 3 import semicongine/vulkan | 4 import semicongine/vulkan |
| 4 import semicongine/platform/window | 5 import semicongine/platform/window |
| 5 import semicongine/math | 6 import semicongine/math |
| 6 import semicongine/entity | 7 import semicongine/entity |
| 7 import semicongine/scene | 8 import semicongine/scene |
| 9 import semicongine/gpu_data | |
| 8 | 10 |
| 9 type | 11 type |
| 10 Vertex = object | 12 Vertex = object |
| 11 pos: Vec3 | 13 pos: Vec3 |
| 12 FragmentInput = object | 14 FragmentInput = object |
| 64 @[], | 66 @[], |
| 65 @[], | 67 @[], |
| 66 selectedPhysicalDevice.filterForGraphicsPresentationQueues() | 68 selectedPhysicalDevice.filterForGraphicsPresentationQueues() |
| 67 ) | 69 ) |
| 68 | 70 |
| 69 const vertexBinary = shaderCode[Vertex, Uniforms, FragmentInput](stage=VK_SHADER_STAGE_VERTEX_BIT, version=450, entrypoint="main", "fragpos = pos;") | 71 const inputs = AttributeGroup(attributes: @[attr(name="pos", thetype=Float32, components=3)]) |
| 70 const fragmentBinary = shaderCode[FragmentInput, void, Pixel](stage=VK_SHADER_STAGE_FRAGMENT_BIT, version=450, entrypoint="main", "color = vec4(1, 1, 1, 0);") | 72 const uniforms = AttributeGroup() |
| 73 const outputs = AttributeGroup(attributes: @[attr(name="fragpos", thetype=Float32, components=3)]) | |
| 74 const fragOutput = AttributeGroup(attributes: @[attr(name="color", thetype=Float32, components=4)]) | |
| 75 const vertexBinary = shaderCode(inputs=inputs, uniforms=uniforms, outputs=outputs, stage=VK_SHADER_STAGE_VERTEX_BIT, version=450, entrypoint="main", "fragpos = pos;") | |
| 76 const fragmentBinary = shaderCode(inputs=outputs, uniforms=uniforms, outputs=fragOutput, stage=VK_SHADER_STAGE_FRAGMENT_BIT, version=450, entrypoint="main", "color = vec4(1, 1, 1, 0);") | |
| 71 var | 77 var |
| 72 vertexshader = createShader[Vertex, Uniforms, FragmentInput](device, VK_SHADER_STAGE_VERTEX_BIT, "main", vertexBinary) | 78 vertexshader = device.createShader(inputs, uniforms, outputs, VK_SHADER_STAGE_VERTEX_BIT, "main", vertexBinary) |
| 73 fragmentshader = createShader[FragmentInput, void, Pixel](device, VK_SHADER_STAGE_FRAGMENT_BIT, "main", fragmentBinary) | 79 fragmentshader = device.createShader(inputs, uniforms, outputs, VK_SHADER_STAGE_FRAGMENT_BIT, "main", fragmentBinary) |
| 74 surfaceFormat = device.physicalDevice.getSurfaceFormats().filterSurfaceFormat() | 80 surfaceFormat = device.physicalDevice.getSurfaceFormats().filterSurfaceFormat() |
| 75 renderpass = device.simpleForwardRenderPass(surfaceFormat.format, vertexshader, fragmentshader, 2) | 81 renderPass = device.simpleForwardRenderPass(surfaceFormat.format, vertexshader, fragmentshader, 2) |
| 76 var (swapchain, res) = device.createSwapchain(renderpass, surfaceFormat, device.firstGraphicsQueue().get().family, 2) | 82 var (swapchain, res) = device.createSwapchain(renderPass, surfaceFormat, device.firstGraphicsQueue().get().family, 2) |
| 77 if res != VK_SUCCESS: | 83 if res != VK_SUCCESS: |
| 78 raise newException(Exception, "Unable to create swapchain") | 84 raise newException(Exception, "Unable to create swapchain") |
| 79 | 85 |
| 80 var thescene = Scene(root: newEntity("scene")) | 86 var thescene = Scene(root: newEntity("scene")) |
| 87 thescene.setupDrawables(renderPass) | |
| 81 | 88 |
| 82 echo "All successfull" | 89 echo "Setup successfull, start rendering" |
| 83 for i in 0 ..< 2: | 90 for i in 0 ..< 10: |
| 84 discard swapchain.drawNextFrame(thescene) | 91 discard swapchain.drawScene(thescene) |
| 85 echo "Rendered ", swapchain.framesRendered, " frames" | 92 echo "Rendered ", swapchain.framesRendered, " frames" |
| 86 echo "Start cleanup" | 93 echo "Start cleanup" |
| 87 | 94 |
| 88 | 95 |
| 89 # cleanup | 96 # cleanup |
| 90 checkVkResult device.vk.vkDeviceWaitIdle() | 97 checkVkResult device.vk.vkDeviceWaitIdle() |
| 91 vertexshader.destroy() | 98 vertexshader.destroy() |
| 92 fragmentshader.destroy() | 99 fragmentshader.destroy() |
| 93 renderpass.destroy() | 100 renderPass.destroy() |
| 94 swapchain.destroy() | 101 swapchain.destroy() |
| 95 device.destroy() | 102 device.destroy() |
| 96 | 103 |
| 97 debugger.destroy() | 104 debugger.destroy() |
| 98 instance.destroy() | 105 instance.destroy() |
