comparison tests/test_vulkan_wrapper.nim @ 107:2d0351a68a4e

add: working render loop
author Sam <sam@basx.dev>
date Mon, 27 Mar 2023 21:01:32 +0700
parents 9c3e3dcb0328
children 70f92081d2c1
comparison
equal deleted inserted replaced
106:9c3e3dcb0328 107:2d0351a68a4e
62 @[], 62 @[],
63 @[], 63 @[],
64 selectedPhysicalDevice.filterForGraphicsPresentationQueues() 64 selectedPhysicalDevice.filterForGraphicsPresentationQueues()
65 ) 65 )
66 66
67 # setup render pipeline
68 var surfaceFormat = device.physicalDevice.getSurfaceFormats().filterSurfaceFormat() 67 var surfaceFormat = device.physicalDevice.getSurfaceFormats().filterSurfaceFormat()
69 var renderpass = device.simpleForwardRenderPass(surfaceFormat.format) 68 var renderpass = device.simpleForwardRenderPass(surfaceFormat.format)
69 echo renderpass
70 var (swapchain, res) = device.createSwapchain(renderpass, surfaceFormat, device.firstGraphicsQueue().get().family) 70 var (swapchain, res) = device.createSwapchain(renderpass, surfaceFormat, device.firstGraphicsQueue().get().family)
71 if res != VK_SUCCESS: 71 if res != VK_SUCCESS:
72 raise newException(Exception, "Unable to create swapchain") 72 raise newException(Exception, "Unable to create swapchain")
73 73
74 # todo: could be create inside "device", but it would be nice to have nim v2 with support for circular dependencies first
75 const vertexBinary = shaderCode[Vertex, Uniforms, FragmentInput](stage=VK_SHADER_STAGE_VERTEX_BIT, version=450, entrypoint="main", "fragpos = pos;") 74 const vertexBinary = shaderCode[Vertex, Uniforms, FragmentInput](stage=VK_SHADER_STAGE_VERTEX_BIT, version=450, entrypoint="main", "fragpos = pos;")
76 const fragmentBinary = shaderCode[FragmentInput, void, Pixel](stage=VK_SHADER_STAGE_FRAGMENT_BIT, version=450, entrypoint="main", "color = vec4(1, 1, 1, 0);") 75 const fragmentBinary = shaderCode[FragmentInput, void, Pixel](stage=VK_SHADER_STAGE_FRAGMENT_BIT, version=450, entrypoint="main", "color = vec4(1, 1, 1, 0);")
77 var 76 var
78 vertexshader = createShader[Vertex, Uniforms, FragmentInput](device, VK_SHADER_STAGE_VERTEX_BIT, "main", vertexBinary) 77 vertexshader = createShader[Vertex, Uniforms, FragmentInput](device, VK_SHADER_STAGE_VERTEX_BIT, "main", vertexBinary)
79 fragmentshader = createShader[FragmentInput, void, Pixel](device, VK_SHADER_STAGE_FRAGMENT_BIT, "main", fragmentBinary) 78 fragmentshader = createShader[FragmentInput, void, Pixel](device, VK_SHADER_STAGE_FRAGMENT_BIT, "main", fragmentBinary)
80 pipeline = renderpass.createPipeline(vertexshader, fragmentshader) 79 pipeline = renderpass.createPipeline(vertexshader, fragmentshader)
81 descriptorPool = device.createDescriptorSetPool(@[(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1'u32)]) 80 descriptorPool = device.createDescriptorSetPool(@[(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1'u32)])
82 descriptorSet = descriptorPool.allocateDescriptorSet(pipeline.descriptorSetLayout, 1) 81 descriptorSet = descriptorPool.allocateDescriptorSet(pipeline.descriptorSetLayout, 1)
83 82
84 echo "All successfull" 83 echo "All successfull"
85 echo swapchain.drawNextFrame(pipeline) 84 discard swapchain.drawNextFrame(pipeline)
86 echo "Start cleanup" 85 echo "Start cleanup"
87 86
88 # cleanup 87 # cleanup
89 checkVkResult device.vk.vkDeviceWaitIdle() 88 checkVkResult device.vk.vkDeviceWaitIdle()
90 descriptorPool.destroy() 89 descriptorPool.destroy()