comparison tests/test_vulkan_wrapper.nim @ 574:bbeec60e25ca

did: first final implementation of scene-graph <-> pipeline connection, not working yet
author Sam <sam@basx.dev>
date Sun, 02 Apr 2023 01:22:09 +0700
parents f31a9821ae1c
children 056e08dfad10
comparison
equal deleted inserted replaced
573:f31a9821ae1c 574:bbeec60e25ca
56 @[], 56 @[],
57 @[], 57 @[],
58 selectedPhysicalDevice.filterForGraphicsPresentationQueues() 58 selectedPhysicalDevice.filterForGraphicsPresentationQueues()
59 ) 59 )
60 60
61 const inputs = AttributeGroup(attributes: @[attr(name="pos", thetype=Float32, components=3)]) 61 const inputs = AttributeGroup(attributes: @[attr(name="position", thetype=Float32, components=3)])
62 const uniforms = AttributeGroup() 62 const uniforms = AttributeGroup()
63 const outputs = AttributeGroup(attributes: @[attr(name="fragpos", thetype=Float32, components=3)]) 63 const outputs = AttributeGroup(attributes: @[attr(name="fragpos", thetype=Float32, components=3)])
64 const fragOutput = AttributeGroup(attributes: @[attr(name="color", thetype=Float32, components=4)]) 64 const fragOutput = AttributeGroup(attributes: @[attr(name="color", thetype=Float32, components=4)])
65 const vertexBinary = shaderCode(inputs=inputs, uniforms=uniforms, outputs=outputs, stage=VK_SHADER_STAGE_VERTEX_BIT, version=450, entrypoint="main", "fragpos = pos;") 65 const vertexBinary = shaderCode(inputs=inputs, uniforms=uniforms, outputs=outputs, stage=VK_SHADER_STAGE_VERTEX_BIT, version=450, entrypoint="main", "fragpos = position;")
66 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);") 66 const fragmentBinary = shaderCode(inputs=outputs, uniforms=uniforms, outputs=fragOutput, stage=VK_SHADER_STAGE_FRAGMENT_BIT, version=450, entrypoint="main", "color = vec4(1, 1, 1, 1);")
67 var 67 var
68 vertexshader = device.createShader(inputs, uniforms, outputs, VK_SHADER_STAGE_VERTEX_BIT, "main", vertexBinary) 68 vertexshader = device.createShader(inputs, uniforms, outputs, VK_SHADER_STAGE_VERTEX_BIT, "main", vertexBinary)
69 fragmentshader = device.createShader(inputs, uniforms, outputs, VK_SHADER_STAGE_FRAGMENT_BIT, "main", fragmentBinary) 69 fragmentshader = device.createShader(inputs, uniforms, outputs, VK_SHADER_STAGE_FRAGMENT_BIT, "main", fragmentBinary)
70 surfaceFormat = device.physicalDevice.getSurfaceFormats().filterSurfaceFormat() 70 surfaceFormat = device.physicalDevice.getSurfaceFormats().filterSurfaceFormat()
71 renderPass = device.simpleForwardRenderPass(surfaceFormat.format, vertexshader, fragmentshader, 2) 71 renderPass = device.simpleForwardRenderPass(surfaceFormat.format, vertexshader, fragmentshader, 2)
72 var (swapchain, res) = device.createSwapchain(renderPass, surfaceFormat, device.firstGraphicsQueue().get().family, 2) 72 var (swapchain, res) = device.createSwapchain(renderPass, surfaceFormat, device.firstGraphicsQueue().get().family, 2)
73 if res != VK_SUCCESS: 73 if res != VK_SUCCESS:
74 raise newException(Exception, "Unable to create swapchain") 74 raise newException(Exception, "Unable to create swapchain")
75 75
76 var thescene = Scene(name: "main", root: newEntity("triangle", newMesh([newVec3(-1, -1), newVec3(0, 1), newVec3(1, -1)]))) 76 var thescene = Scene(
77 name: "main",
78 root: newEntity("root",
79 newEntity("triangle1", newMesh([newVec3f(-0.5, -0.5), newVec3f(0.5, 0.5), newVec3f(0.5, -0.5)])),
80 newEntity("triangle2", newMesh([newVec3f(-0.5, -0.5), newVec3f(0.5, -0.5), newVec3f(0.5, 0.5)])),
81 )
82 )
77 thescene.setupDrawables(renderPass) 83 thescene.setupDrawables(renderPass)
78 84
79 echo "Setup successfull, start rendering" 85 echo "Setup successfull, start rendering"
80 for i in 0 ..< 1: 86 for i in 0 ..< 1:
81 discard swapchain.drawScene(thescene) 87 discard swapchain.drawScene(thescene)
83 echo "Start cleanup" 89 echo "Start cleanup"
84 90
85 91
86 # cleanup 92 # cleanup
87 checkVkResult device.vk.vkDeviceWaitIdle() 93 checkVkResult device.vk.vkDeviceWaitIdle()
94 thescene.destroy()
88 vertexshader.destroy() 95 vertexshader.destroy()
89 fragmentshader.destroy() 96 fragmentshader.destroy()
90 renderPass.destroy() 97 renderPass.destroy()
91 swapchain.destroy() 98 swapchain.destroy()
92 device.destroy() 99 device.destroy()