Mercurial > games > semicongine
comparison tests/test_vulkan_wrapper.nim @ 115:e18538442837
add: comments for further refactoring
| author | Sam <sam@basx.dev> |
|---|---|
| date | Mon, 03 Apr 2023 00:10:08 +0700 |
| parents | 056e08dfad10 |
| children | 40ff2453855e |
comparison
equal
deleted
inserted
replaced
| 114:056e08dfad10 | 115:e18538442837 |
|---|---|
| 8 import semicongine/gpu_data | 8 import semicongine/gpu_data |
| 9 import semicongine/mesh | 9 import semicongine/mesh |
| 10 | 10 |
| 11 proc diagnostics(instance: Instance) = | 11 proc diagnostics(instance: Instance) = |
| 12 # diagnostic output | 12 # diagnostic output |
| 13 # print basic driver infos | |
| 14 echo "Layers" | |
| 15 for layer in getLayers(): | |
| 16 echo " " & layer | |
| 17 echo "Instance extensions" | |
| 18 for extension in getInstanceExtensions(): | |
| 19 echo " " & extension | |
| 20 | |
| 13 echo "Devices" | 21 echo "Devices" |
| 14 for device in instance.getPhysicalDevices(): | 22 for device in instance.getPhysicalDevices(): |
| 15 echo " " & $device | 23 echo " " & $device |
| 16 echo " Rating: " & $device.rateGraphics() | 24 echo " Rating: " & $device.rateGraphics() |
| 17 echo " Extensions" | 25 echo " Extensions" |
| 30 echo " Surface formats" | 38 echo " Surface formats" |
| 31 for format in device.getSurfaceFormats(): | 39 for format in device.getSurfaceFormats(): |
| 32 echo " " & $format | 40 echo " " & $format |
| 33 | 41 |
| 34 when isMainModule: | 42 when isMainModule: |
| 35 # print basic driver infos | |
| 36 echo "Layers" | |
| 37 for layer in getLayers(): | |
| 38 echo " " & layer | |
| 39 echo "Instance extensions" | |
| 40 for extension in getInstanceExtensions(): | |
| 41 echo " " & extension | |
| 42 | 43 |
| 44 # INIT ENGINE: | |
| 43 # create instance | 45 # create instance |
| 44 var thewindow = createWindow("Test") | 46 var thewindow = createWindow("Test") |
| 45 var instance = thewindow.createInstance( | 47 var instance = thewindow.createInstance( |
| 46 vulkanVersion=VK_MAKE_API_VERSION(0, 1, 3, 0), | 48 vulkanVersion=VK_MAKE_API_VERSION(0, 1, 3, 0), |
| 47 instanceExtensions= @["VK_EXT_debug_utils"], | 49 instanceExtensions= @["VK_EXT_debug_utils"], |
| 48 layers= @["VK_LAYER_KHRONOS_validation", "VK_LAYER_MESA_overlay"] | 50 layers= @["VK_LAYER_KHRONOS_validation", "VK_LAYER_MESA_overlay"] |
| 49 ) | 51 ) |
| 50 var debugger = instance.createDebugMessenger() | 52 var debugger = instance.createDebugMessenger() |
| 51 | |
| 52 # create devices | 53 # create devices |
| 53 let selectedPhysicalDevice = instance.getPhysicalDevices().filterBestGraphics() | 54 let selectedPhysicalDevice = instance.getPhysicalDevices().filterBestGraphics() |
| 54 var device = instance.createDevice( | 55 var device = instance.createDevice( |
| 55 selectedPhysicalDevice, | 56 selectedPhysicalDevice, |
| 56 @[], | 57 @[], |
| 57 @[], | 58 @[], |
| 58 selectedPhysicalDevice.filterForGraphicsPresentationQueues() | 59 selectedPhysicalDevice.filterForGraphicsPresentationQueues() |
| 59 ) | 60 ) |
| 60 | 61 |
| 62 # INIT RENDERER: | |
| 61 const | 63 const |
| 62 vertexInput = initAttributeGroup( | 64 vertexInput = initAttributeGroup( |
| 63 asAttribute(default(Vec3f), "position"), | 65 asAttribute(default(Vec3f), "position"), |
| 64 asAttribute(default(Vec3f), "color"), | 66 asAttribute(default(Vec3f), "color"), |
| 65 ) | 67 ) |
| 84 renderPass = device.simpleForwardRenderPass(surfaceFormat.format, vertexshader, fragmentshader, 2) | 86 renderPass = device.simpleForwardRenderPass(surfaceFormat.format, vertexshader, fragmentshader, 2) |
| 85 (swapchain, res) = device.createSwapchain(renderPass, surfaceFormat, device.firstGraphicsQueue().get().family, 2) | 87 (swapchain, res) = device.createSwapchain(renderPass, surfaceFormat, device.firstGraphicsQueue().get().family, 2) |
| 86 if res != VK_SUCCESS: | 88 if res != VK_SUCCESS: |
| 87 raise newException(Exception, "Unable to create swapchain") | 89 raise newException(Exception, "Unable to create swapchain") |
| 88 | 90 |
| 91 # INIT SCENE | |
| 89 var thescene = Scene( | 92 var thescene = Scene( |
| 90 name: "main", | 93 name: "main", |
| 91 root: newEntity("root", | 94 root: newEntity("root", |
| 92 newEntity("triangle1", initMesh( | 95 newEntity("triangle1", initMesh( |
| 93 positions=[newVec3f(0.0, -0.5), newVec3f(0.5, 0.5), newVec3f(-0.5, 0.5)], | 96 positions=[newVec3f(0.0, -0.5), newVec3f(0.5, 0.5), newVec3f(-0.5, 0.5)], |
| 95 )), | 98 )), |
| 96 ) | 99 ) |
| 97 ) | 100 ) |
| 98 thescene.setupDrawables(renderPass) | 101 thescene.setupDrawables(renderPass) |
| 99 | 102 |
| 103 # MAINLOOP | |
| 100 echo "Setup successfull, start rendering" | 104 echo "Setup successfull, start rendering" |
| 101 for i in 0 ..< 1000: | 105 for i in 0 ..< 1000: |
| 102 discard swapchain.drawScene(thescene) | 106 discard swapchain.drawScene(thescene) |
| 103 echo "Rendered ", swapchain.framesRendered, " frames" | 107 echo "Rendered ", swapchain.framesRendered, " frames" |
| 104 checkVkResult device.vk.vkDeviceWaitIdle() | 108 checkVkResult device.vk.vkDeviceWaitIdle() |
| 105 | 109 |
| 106 # cleanup | 110 # cleanup |
| 107 echo "Start cleanup" | 111 echo "Start cleanup" |
| 108 | 112 |
| 109 # logical | 113 # destroy scene |
| 110 thescene.destroy() | 114 thescene.destroy() |
| 111 | 115 |
| 112 # rendering objects | 116 # destroy renderer |
| 113 vertexshader.destroy() | 117 vertexshader.destroy() |
| 114 fragmentshader.destroy() | 118 fragmentshader.destroy() |
| 115 renderPass.destroy() | 119 renderPass.destroy() |
| 116 swapchain.destroy() | 120 swapchain.destroy() |
| 117 | 121 |
| 118 # global objects | 122 # destroy engine |
| 119 device.destroy() | 123 device.destroy() |
| 120 debugger.destroy() | 124 debugger.destroy() |
| 121 instance.destroy() | 125 instance.destroy() |
