Mercurial > games > semicongine
comparison tests/test_vulkan_wrapper.nim @ 127:5871acc2977e
did: big refactoring
author | Sam <sam@basx.dev> |
---|---|
date | Wed, 12 Apr 2023 01:20:53 +0700 |
parents | 81a8e62215db |
children | 9901ec3831d1 |
comparison
equal
deleted
inserted
replaced
126:81a8e62215db | 127:5871acc2977e |
---|---|
111 name: "main", | 111 name: "main", |
112 root: newEntity("root", t, r, c) | 112 root: newEntity("root", t, r, c) |
113 ) | 113 ) |
114 | 114 |
115 when isMainModule: | 115 when isMainModule: |
116 # INIT ENGINE: | 116 var engine = initEngine("Test") |
117 # create instance | |
118 var thewindow = createWindow("Test") | |
119 var instance = thewindow.createInstance( | |
120 vulkanVersion=VK_MAKE_API_VERSION(0, 1, 3, 0), | |
121 instanceExtensions= @["VK_EXT_debug_utils"], | |
122 layers= @["VK_LAYER_KHRONOS_validation", "VK_LAYER_MESA_overlay"] | |
123 ) | |
124 var debugger = instance.createDebugMessenger() | |
125 # create devices | |
126 let selectedPhysicalDevice = instance.getPhysicalDevices().filterBestGraphics() | |
127 var device = instance.createDevice( | |
128 selectedPhysicalDevice, | |
129 @[], | |
130 @["VK_EXT_index_type_uint8"], | |
131 selectedPhysicalDevice.filterForGraphicsPresentationQueues() | |
132 ) | |
133 | 117 |
134 # INIT RENDERER: | 118 # INIT RENDERER: |
135 const | 119 const |
136 vertexInput = @[ | 120 vertexInput = @[ |
137 attr[Vec3f]("position", memoryLocation=VRAM), | 121 attr[Vec3f]("position", memoryLocation=VRAM), |
144 vertexCode = compileGlslShader( | 128 vertexCode = compileGlslShader( |
145 stage=VK_SHADER_STAGE_VERTEX_BIT, | 129 stage=VK_SHADER_STAGE_VERTEX_BIT, |
146 inputs=vertexInput, | 130 inputs=vertexInput, |
147 uniforms=uniforms, | 131 uniforms=uniforms, |
148 outputs=vertexOutput, | 132 outputs=vertexOutput, |
149 body="""gl_Position = vec4(position + translate, 1.0); outcolor = color;""" | 133 main="""gl_Position = vec4(position + translate, 1.0); outcolor = color;""" |
150 ) | 134 ) |
151 fragmentCode = compileGlslShader( | 135 fragmentCode = compileGlslShader( |
152 stage=VK_SHADER_STAGE_FRAGMENT_BIT, | 136 stage=VK_SHADER_STAGE_FRAGMENT_BIT, |
153 inputs=vertexOutput, | 137 inputs=vertexOutput, |
154 uniforms=uniforms, | 138 uniforms=uniforms, |
155 outputs=fragOutput, | 139 outputs=fragOutput, |
156 body="color = vec4(outcolor, 1);" | 140 main="color = vec4(outcolor, 1);" |
157 ) | 141 ) |
158 var | 142 var |
159 vertexshader = device.createShaderModule(vertexCode) | 143 vertexshader = engine.gpuDevice.createShaderModule(vertexCode) |
160 fragmentshader = device.createShaderModule(fragmentCode) | 144 fragmentshader = engine.gpuDevice.createShaderModule(fragmentCode) |
161 surfaceFormat = device.physicalDevice.getSurfaceFormats().filterSurfaceFormat() | 145 surfaceFormat = engine.gpuDevice.physicalDevice.getSurfaceFormats().filterSurfaceFormat() |
162 renderPass = device.simpleForwardRenderPass(surfaceFormat.format, vertexshader, fragmentshader, 2) | 146 renderPass = engine.gpuDevice.simpleForwardRenderPass(surfaceFormat.format, vertexshader, fragmentshader, 2) |
163 (swapchain, res) = device.createSwapchain(renderPass, surfaceFormat, device.firstGraphicsQueue().get().family, 2) | 147 (swapchain, res) = engine.gpuDevice.createSwapchain(renderPass, surfaceFormat, engine.gpuDevice.firstGraphicsQueue().get().family, 2) |
164 if res != VK_SUCCESS: | 148 if res != VK_SUCCESS: |
165 raise newException(Exception, "Unable to create swapchain") | 149 raise newException(Exception, "Unable to create swapchain") |
166 | 150 |
167 # INIT SCENE | 151 # INIT SCENE |
168 var time = initShaderGlobal("time", 0.0'f32) | |
169 | 152 |
170 # var thescene = scene_simple() | 153 # var thescene = scene_simple() |
171 # var thescene = scene_different_mesh_types() | 154 # var thescene = scene_different_mesh_types() |
172 var thescene = scene_primitives() | 155 var thescene = scene_primitives() |
156 var time = initShaderGlobal("time", 0.0'f32) | |
173 thescene.root.components.add time | 157 thescene.root.components.add time |
174 thescene.setupDrawables(renderPass) | 158 thescene.setupDrawableBuffers(engine.gpuDevice, vertexInput) |
175 swapchain.setupUniforms(thescene) | |
176 | 159 |
177 # MAINLOOP | 160 # MAINLOOP |
178 echo "Setup successfull, start rendering" | 161 echo "Setup successfull, start rendering" |
179 for i in 0 ..< 10000: | 162 for i in 0 ..< 10000: |
180 setValue[float32](time.value, get[float32](time.value) + 0.0005) | 163 setValue[float32](time.value, get[float32](time.value) + 0.0005) |
181 discard swapchain.drawScene(thescene) | 164 discard swapchain.drawScene(thescene) |
182 echo "Rendered ", swapchain.framesRendered, " frames" | 165 echo "Rendered ", swapchain.framesRendered, " frames" |
183 checkVkResult device.vk.vkDeviceWaitIdle() | |
184 | 166 |
185 # cleanup | 167 # cleanup |
186 echo "Start cleanup" | 168 echo "Start cleanup" |
169 checkVkResult engine.gpuDevice.vk.vkDeviceWaitIdle() | |
187 | 170 |
188 # destroy scene | 171 # destroy scene |
189 thescene.destroy() | 172 thescene.destroy() |
190 | 173 |
191 # destroy renderer | 174 # destroy renderer |
193 fragmentshader.destroy() | 176 fragmentshader.destroy() |
194 renderPass.destroy() | 177 renderPass.destroy() |
195 swapchain.destroy() | 178 swapchain.destroy() |
196 | 179 |
197 # destroy engine | 180 # destroy engine |
198 device.destroy() | 181 engine.destroy() |
199 debugger.destroy() | |
200 instance.destroy() | |
201 thewindow.destroy() |