Mercurial > games > semicongine
annotate tests/test_rendering.nim @ 1254:b0f4c8ccd49a
did: stuff to test gltf importer
| author | sam <sam@basx.dev> | 
|---|---|
| date | Sat, 27 Jul 2024 20:47:54 +0700 | 
| parents | 01e9f41d35b1 | 
| children | 4cf9872f7bb6 | 
| rev | line source | 
|---|---|
| 
1233
 
1cf698973dca
did: cleanup tests and old platform layer files
 
sam <sam@basx.dev> 
parents: 
1232 
diff
changeset
 | 
1 import std/os | 
| 1231 | 2 import std/sequtils | 
| 1232 | 3 import std/monotimes | 
| 4 import std/times | |
| 1203 | 5 import std/options | 
| 1204 | 6 import std/random | 
| 7 | |
| 
1223
 
55896320c8bf
fix: references to new package not updated
 
sam <sam@basx.dev> 
parents: 
1214 
diff
changeset
 | 
8 import ../semiconginev2 | 
| 1203 | 9 | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
10 proc test_01_triangle(time: float32) = | 
| 1203 | 11 var renderdata = InitRenderData() | 
| 12 | |
| 13 type | |
| 1252 | 14 PushConstant = object | 
| 15 scale: float32 | |
| 1242 | 16 Shader = object | 
| 1203 | 17 position {.VertexAttribute.}: Vec3f | 
| 18 color {.VertexAttribute.}: Vec3f | |
| 1252 | 19 pushConstant {.PushConstantAttribute.}: PushConstant | 
| 1203 | 20 fragmentColor {.Pass.}: Vec3f | 
| 21 outColor {.ShaderOutput.}: Vec4f | |
| 22 # code | |
| 23 vertexCode: string = """void main() { | |
| 24 fragmentColor = color; | |
| 1252 | 25 gl_Position = vec4(position * pushConstant.scale, 1);}""" | 
| 1203 | 26 fragmentCode: string = """void main() { | 
| 27 outColor = vec4(fragmentColor, 1);}""" | |
| 28 TriangleMesh = object | |
| 29 position: GPUArray[Vec3f, VertexBuffer] | |
| 30 color: GPUArray[Vec3f, VertexBuffer] | |
| 31 var mesh = TriangleMesh( | |
| 1204 | 32 position: asGPUArray([NewVec3f(-0.5, -0.5), NewVec3f(0, 0.5), NewVec3f(0.5, -0.5)], VertexBuffer), | 
| 1203 | 33 color: asGPUArray([NewVec3f(0, 0, 1), NewVec3f(0, 1, 0), NewVec3f(1, 0, 0)], VertexBuffer), | 
| 34 ) | |
| 1204 | 35 AssignBuffers(renderdata, mesh) | 
| 36 renderdata.FlushAllMemory() | |
| 1203 | 37 | 
| 1242 | 38 var pipeline = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass) | 
| 1203 | 39 | 
| 
1235
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
40 var start = getMonoTime() | 
| 
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
41 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 
| 1242 | 42 | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
43 WithNextFrame(framebuffer, commandbuffer): | 
| 1242 | 44 | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
45 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | 
| 1242 | 46 | 
| 1203 | 47 WithPipeline(commandbuffer, pipeline): | 
| 1242 | 48 | 
| 1252 | 49 RenderWithPushConstant(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh, pushConstant = PushConstant(scale: 0.3 + ((getMonoTime() - start).inMilliseconds().int / 1000))) | 
| 1203 | 50 | 
| 51 # cleanup | |
| 1204 | 52 checkVkResult vkDeviceWaitIdle(vulkan.device) | 
| 1203 | 53 DestroyPipeline(pipeline) | 
| 54 DestroyRenderData(renderdata) | |
| 55 | |
| 56 | |
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
57 proc test_02_triangle_quad_instanced(time: float32) = | 
| 1204 | 58 var renderdata = InitRenderData() | 
| 59 | |
| 60 type | |
| 61 SomeShader = object | |
| 62 position {.VertexAttribute.}: Vec3f | |
| 63 color {.VertexAttribute.}: Vec3f | |
| 64 pos {.InstanceAttribute.}: Vec3f | |
| 65 scale {.InstanceAttribute.}: float32 | |
| 66 fragmentColor {.Pass.}: Vec3f | |
| 67 outColor {.ShaderOutput.}: Vec4f | |
| 68 # code | |
| 69 vertexCode: string = """void main() { | |
| 70 fragmentColor = color; | |
| 71 gl_Position = vec4((position * scale) + pos, 1);}""" | |
| 72 fragmentCode: string = """void main() { | |
| 73 outColor = vec4(fragmentColor, 1);}""" | |
| 74 TriangleMesh = object | |
| 75 position: GPUArray[Vec3f, VertexBuffer] | |
| 76 color: GPUArray[Vec3f, VertexBuffer] | |
| 77 QuadMesh = object | |
| 78 position: GPUArray[Vec3f, VertexBuffer] | |
| 79 color: GPUArray[Vec3f, VertexBuffer] | |
| 80 indices: GPUArray[uint16, IndexBuffer] | |
| 81 Instances = object | |
| 82 pos: GPUArray[Vec3f, VertexBuffer] | |
| 83 scale: GPUArray[float32, VertexBuffer] | |
| 84 var tri = TriangleMesh( | |
| 85 position: asGPUArray([NewVec3f(-0.5, -0.5), NewVec3f(0, 0.5), NewVec3f(0.5, -0.5)], VertexBuffer), | |
| 86 color: asGPUArray([NewVec3f(0, 0, 1), NewVec3f(0, 1, 0), NewVec3f(1, 0, 0)], VertexBuffer), | |
| 87 ) | |
| 88 var quad = QuadMesh( | |
| 89 position: asGPUArray([NewVec3f(-0.3, -0.3), NewVec3f(-0.3, 0.3), NewVec3f(0.3, 0.3), NewVec3f(0.3, -0.3)], VertexBuffer), | |
| 90 indices: asGPUArray([0'u16, 1'u16, 2'u16, 2'u16, 3'u16, 0'u16], IndexBuffer), | |
| 91 color: asGPUArray([NewVec3f(1, 1, 1), NewVec3f(1, 1, 1), NewVec3f(1, 1, 1), NewVec3f(1, 1, 1)], VertexBuffer), | |
| 92 ) | |
| 93 | |
| 94 var instancesA: Instances | |
| 95 for n in 1..100: | |
| 96 instancesA.pos.data.add NewVec3f(rand(-0.8'f32 .. 0.8'f32), rand(-0.8'f32 .. 0'f32)) | |
| 97 instancesA.scale.data.add rand(0.3'f32 .. 0.4'f32) | |
| 98 var instancesB: Instances | |
| 99 for n in 1..100: | |
| 100 instancesB.pos.data.add NewVec3f(rand(-0.8'f32 .. 0.8'f32), rand(0'f32 .. 0.8'f32)) | |
| 101 instancesB.scale.data.add rand(0.1'f32 .. 0.2'f32) | |
| 102 | |
| 103 AssignBuffers(renderdata, tri) | |
| 104 AssignBuffers(renderdata, quad) | |
| 105 AssignBuffers(renderdata, instancesA) | |
| 106 AssignBuffers(renderdata, instancesB) | |
| 107 renderdata.FlushAllMemory() | |
| 108 | |
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
109 var pipeline = CreatePipeline[SomeShader](renderPass = vulkan.swapchain.renderPass) | 
| 1204 | 110 | 
| 
1235
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
111 var start = getMonoTime() | 
| 
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
112 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 
| 1242 | 113 | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
114 WithNextFrame(framebuffer, commandbuffer): | 
| 1242 | 115 | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
116 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | 
| 1242 | 117 | 
| 1204 | 118 WithPipeline(commandbuffer, pipeline): | 
| 1242 | 119 | 
| 1204 | 120 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad, instances = instancesA) | 
| 121 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad, instances = instancesB) | |
| 122 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = tri, instances = instancesA) | |
| 123 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = tri, instances = instancesB) | |
| 124 | |
| 125 # cleanup | |
| 126 checkVkResult vkDeviceWaitIdle(vulkan.device) | |
| 127 DestroyPipeline(pipeline) | |
| 128 DestroyRenderData(renderdata) | |
| 129 | |
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
130 proc test_03_simple_descriptorset(time: float32) = | 
| 1210 | 131 var renderdata = InitRenderData() | 
| 132 | |
| 133 type | |
| 134 Material = object | |
| 135 baseColor: Vec3f | |
| 136 | |
| 137 Uniforms = object | |
| 138 material: GPUValue[Material, UniformBuffer] | |
| 1252 | 139 texture1: Image[BGRA] | 
| 1210 | 140 | 
| 141 QuadShader = object | |
| 142 position {.VertexAttribute.}: Vec3f | |
| 143 fragmentColor {.Pass.}: Vec3f | |
| 144 uv {.Pass.}: Vec2f | |
| 145 outColor {.ShaderOutput.}: Vec4f | |
| 146 descriptorSets {.DescriptorSets.}: (Uniforms, ) | |
| 147 # code | |
| 148 vertexCode: string = """void main() { | |
| 149 fragmentColor = material.baseColor; | |
| 150 gl_Position = vec4(position, 1); | |
| 151 gl_Position.x += ((material.baseColor.b - 0.5) * 2) - 0.5; | |
| 152 uv = position.xy + 0.5; | |
| 153 }""" | |
| 154 fragmentCode: string = """void main() { | |
| 155 outColor = vec4(fragmentColor, 1) * texture(texture1, uv);}""" | |
| 156 QuadMesh = object | |
| 157 position: GPUArray[Vec3f, VertexBuffer] | |
| 158 indices: GPUArray[uint16, IndexBuffer] | |
| 159 | |
| 1252 | 160 let R = BGRA([255'u8, 0'u8, 0'u8, 255'u8]) | 
| 161 let G = BGRA([0'u8, 255'u8, 0'u8, 255'u8]) | |
| 162 let B = BGRA([0'u8, 0'u8, 255'u8, 255'u8]) | |
| 163 let W = BGRA([255'u8, 255'u8, 255'u8, 255'u8]) | |
| 1210 | 164 var | 
| 165 quad = QuadMesh( | |
| 166 position: asGPUArray([NewVec3f(-0.5, -0.5), NewVec3f(-0.5, 0.5), NewVec3f(0.5, 0.5), NewVec3f(0.5, -0.5)], VertexBuffer), | |
| 167 indices: asGPUArray([0'u16, 1'u16, 2'u16, 2'u16, 3'u16, 0'u16], IndexBuffer), | |
| 168 ) | |
| 169 uniforms1 = asDescriptorSet( | |
| 170 Uniforms( | |
| 171 material: asGPUValue(Material(baseColor: NewVec3f(1, 1, 1)), UniformBuffer), | |
| 1252 | 172 texture1: Image[BGRA](width: 3, height: 3, data: @[R, G, B, G, B, R, B, R, G], minInterpolation: VK_FILTER_NEAREST, magInterpolation: VK_FILTER_NEAREST), | 
| 1210 | 173 ) | 
| 174 ) | |
| 175 uniforms2 = asDescriptorSet( | |
| 176 Uniforms( | |
| 177 material: asGPUValue(Material(baseColor: NewVec3f(0.5, 0.5, 0.5)), UniformBuffer), | |
| 1252 | 178 texture1: Image[BGRA](width: 2, height: 2, data: @[R, G, B, W]), | 
| 
1212
 
518a952eccbf
did: increase texture format compatability
 
sam <sam@basx.dev> 
parents: 
1211 
diff
changeset
 | 
179 ) | 
| 1210 | 180 ) | 
| 181 | |
| 182 AssignBuffers(renderdata, quad) | |
| 183 AssignBuffers(renderdata, uniforms1) | |
| 184 AssignBuffers(renderdata, uniforms2) | |
| 1228 | 185 UploadImages(renderdata, uniforms1) | 
| 186 UploadImages(renderdata, uniforms2) | |
| 1210 | 187 renderdata.FlushAllMemory() | 
| 188 | |
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
189 var pipeline = CreatePipeline[QuadShader](renderPass = vulkan.swapchain.renderPass) | 
| 1210 | 190 | 
| 191 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1) | |
| 192 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms2) | |
| 193 | |
| 
1235
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
194 var start = getMonoTime() | 
| 
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
195 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 
| 1242 | 196 | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
197 WithNextFrame(framebuffer, commandbuffer): | 
| 1242 | 198 | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
199 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | 
| 1242 | 200 | 
| 1210 | 201 WithPipeline(commandbuffer, pipeline): | 
| 1242 | 202 | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
203 WithBind(commandbuffer, (uniforms1, ), pipeline): | 
| 1210 | 204 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) | 
| 1242 | 205 | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
206 WithBind(commandbuffer, (uniforms2, ), pipeline): | 
| 1210 | 207 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) | 
| 208 | |
| 209 # cleanup | |
| 210 checkVkResult vkDeviceWaitIdle(vulkan.device) | |
| 211 DestroyPipeline(pipeline) | |
| 212 DestroyRenderData(renderdata) | |
| 213 | |
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
214 proc test_04_multiple_descriptorsets(time: float32) = | 
| 1204 | 215 var renderdata = InitRenderData() | 
| 1203 | 216 | 
| 1204 | 217 type | 
| 218 RenderSettings = object | |
| 1209 | 219 brigthness: float32 | 
| 1210 | 220 Material = object | 
| 221 baseColor: Vec3f | |
| 1209 | 222 ObjectSettings = object | 
| 1210 | 223 scale: float32 | 
| 224 materialIndex: uint32 | |
| 225 Constants = object | |
| 226 offset: Vec2f | |
| 227 | |
| 228 ConstSet = object | |
| 229 constants: GPUValue[Constants, UniformBuffer] | |
| 1209 | 230 MainSet = object | 
| 231 renderSettings: GPUValue[RenderSettings, UniformBufferMapped] | |
| 1210 | 232 material: array[2, GPUValue[Material, UniformBuffer]] | 
| 1242 | 233 texture1: array[2, Image[Gray]] | 
| 1209 | 234 OtherSet = object | 
| 1210 | 235 objectSettings: GPUValue[ObjectSettings, UniformBufferMapped] | 
| 1209 | 236 | 
| 1204 | 237 QuadShader = object | 
| 238 position {.VertexAttribute.}: Vec3f | |
| 239 fragmentColor {.Pass.}: Vec3f | |
| 1210 | 240 uv {.Pass.}: Vec2f | 
| 1204 | 241 outColor {.ShaderOutput.}: Vec4f | 
| 1210 | 242 descriptorSets {.DescriptorSets.}: (ConstSet, MainSet, OtherSet) | 
| 1204 | 243 # code | 
| 244 vertexCode: string = """void main() { | |
| 1210 | 245 fragmentColor = material[objectSettings.materialIndex].baseColor * renderSettings.brigthness; | 
| 246 gl_Position = vec4(position * objectSettings.scale, 1); | |
| 247 gl_Position.xy += constants.offset.xy; | |
| 248 gl_Position.x += material[objectSettings.materialIndex].baseColor.b - 0.5; | |
| 249 uv = position.xy + 0.5; | |
| 250 }""" | |
| 1204 | 251 fragmentCode: string = """void main() { | 
| 1210 | 252 outColor = vec4(fragmentColor * texture(texture1[objectSettings.materialIndex], uv).rrr, 1); | 
| 253 }""" | |
| 1204 | 254 QuadMesh = object | 
| 255 position: GPUArray[Vec3f, VertexBuffer] | |
| 256 indices: GPUArray[uint16, IndexBuffer] | |
| 1203 | 257 | 
| 1204 | 258 var quad = QuadMesh( | 
| 1209 | 259 position: asGPUArray([NewVec3f(-0.5, -0.5), NewVec3f(-0.5, 0.5), NewVec3f(0.5, 0.5), NewVec3f(0.5, -0.5)], VertexBuffer), | 
| 1204 | 260 indices: asGPUArray([0'u16, 1'u16, 2'u16, 2'u16, 3'u16, 0'u16], IndexBuffer), | 
| 1209 | 261 ) | 
| 1210 | 262 var constset = asDescriptorSet( | 
| 263 ConstSet( | |
| 264 constants: asGPUValue(Constants(offset: NewVec2f(-0.3, 0.2)), UniformBuffer), | |
| 265 ) | |
| 266 ) | |
| 1242 | 267 let G = Gray([50'u8]) | 
| 268 let W = Gray([255'u8]) | |
| 1210 | 269 var mainset = asDescriptorSet( | 
| 1209 | 270 MainSet( | 
| 271 renderSettings: asGPUValue(RenderSettings(brigthness: 0), UniformBufferMapped), | |
| 1210 | 272 material: [ | 
| 273 asGPUValue(Material(baseColor: NewVec3f(1, 1, 0)), UniformBuffer), | |
| 274 asGPUValue(Material(baseColor: NewVec3f(1, 0, 1)), UniformBuffer), | |
| 275 ], | |
| 276 texture1: [ | |
| 1252 | 277 Image[Gray](width: 2, height: 2, data: @[W, G, G, W], minInterpolation: VK_FILTER_NEAREST, magInterpolation: VK_FILTER_NEAREST), | 
| 278 Image[Gray](width: 3, height: 3, data: @[W, G, W, G, W, G, W, G, W], minInterpolation: VK_FILTER_NEAREST, magInterpolation: VK_FILTER_NEAREST), | |
| 1210 | 279 ], | 
| 280 ), | |
| 281 ) | |
| 282 var otherset1 = asDescriptorSet( | |
| 283 OtherSet( | |
| 284 objectSettings: asGPUValue(ObjectSettings(scale: 1.0, materialIndex: 0), UniformBufferMapped), | |
| 1209 | 285 ) | 
| 1204 | 286 ) | 
| 1210 | 287 var otherset2 = asDescriptorSet( | 
| 1209 | 288 OtherSet( | 
| 1210 | 289 objectSettings: asGPUValue(ObjectSettings(scale: 1.0, materialIndex: 1), UniformBufferMapped), | 
| 1209 | 290 ) | 
| 1204 | 291 ) | 
| 1209 | 292 | 
| 1204 | 293 AssignBuffers(renderdata, quad) | 
| 1210 | 294 AssignBuffers(renderdata, constset) | 
| 295 AssignBuffers(renderdata, mainset) | |
| 296 AssignBuffers(renderdata, otherset1) | |
| 297 AssignBuffers(renderdata, otherset2) | |
| 1228 | 298 UploadImages(renderdata, mainset) | 
| 1204 | 299 renderdata.FlushAllMemory() | 
| 300 | |
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
301 var pipeline = CreatePipeline[QuadShader](renderPass = vulkan.swapchain.renderPass) | 
| 1204 | 302 | 
| 1210 | 303 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], constset) | 
| 304 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[1], mainset) | |
| 305 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[2], otherset1) | |
| 306 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[2], otherset2) | |
| 
1205
 
f7530247a21f
did: improve descriptor-set handling, add simple descriptor set test
 
sam <sam@basx.dev> 
parents: 
1204 
diff
changeset
 | 
307 | 
| 
1235
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
308 var start = getMonoTime() | 
| 
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
309 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 
| 1242 | 310 | 
| 311 WithNextFrame(framebuffer, commandbuffer): | |
| 312 | |
| 313 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | |
| 314 | |
| 315 WithPipeline(commandbuffer, pipeline): | |
| 316 | |
| 317 WithBind(commandbuffer, (constset, mainset, otherset1), pipeline): | |
| 318 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) | |
| 319 | |
| 320 WithBind(commandbuffer, (constset, mainset, otherset2), pipeline): | |
| 321 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) | |
| 322 | |
| 
1235
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
323 mainset.data.renderSettings.data.brigthness = ((getMonoTime() - start).inMilliseconds().int / 1000) / time | 
| 
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
324 otherset1.data.objectSettings.data.scale = 0.5 + ((getMonoTime() - start).inMilliseconds().int / 1000) / time | 
| 1210 | 325 UpdateGPUBuffer(mainset.data.renderSettings) | 
| 326 UpdateGPUBuffer(otherset1.data.objectSettings) | |
| 
1205
 
f7530247a21f
did: improve descriptor-set handling, add simple descriptor set test
 
sam <sam@basx.dev> 
parents: 
1204 
diff
changeset
 | 
327 renderdata.FlushAllMemory() | 
| 1204 | 328 | 
| 329 # cleanup | |
| 1203 | 330 checkVkResult vkDeviceWaitIdle(vulkan.device) | 
| 1204 | 331 DestroyPipeline(pipeline) | 
| 332 DestroyRenderData(renderdata) | |
| 333 | |
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
334 proc test_05_cube(time: float32) = | 
| 1231 | 335 type | 
| 336 | |
| 337 UniformData = object | |
| 1232 | 338 mvp: Mat4 | 
| 1231 | 339 Uniforms = object | 
| 340 data: GPUValue[UniformData, UniformBufferMapped] | |
| 341 CubeShader = object | |
| 342 position {.VertexAttribute.}: Vec3f | |
| 343 color {.VertexAttribute.}: Vec4f | |
| 344 fragmentColor {.Pass.}: Vec4f | |
| 345 outColor {.ShaderOutput.}: Vec4f | |
| 346 descriptorSets {.DescriptorSets.}: (Uniforms, ) | |
| 347 # code | |
| 348 vertexCode = """void main() { | |
| 349 fragmentColor = color; | |
| 1232 | 350 gl_Position = vec4(position, 1) * data.mvp; | 
| 1231 | 351 }""" | 
| 352 fragmentCode = """void main() { | |
| 353 outColor = fragmentColor; | |
| 354 }""" | |
| 355 Mesh = object | |
| 356 position: GPUArray[Vec3f, VertexBuffer] | |
| 357 normals: GPUArray[Vec3f, VertexBuffer] | |
| 358 color: GPUArray[Vec4f, VertexBuffer] | |
| 359 | |
| 360 let quad = @[ | |
| 361 NewVec3f(-0.5, -0.5), NewVec3f(-0.5, +0.5), NewVec3f(+0.5, +0.5), | |
| 362 NewVec3f(+0.5, +0.5), NewVec3f(+0.5, -0.5), NewVec3f(-0.5, -0.5), | |
| 363 ] | |
| 1232 | 364 proc transf(data: seq[Vec3f], mat: Mat4): seq[Vec3f] = | 
| 1231 | 365 for v in data: | 
| 1232 | 366 result.add mat * v | 
| 1231 | 367 | 
| 368 var | |
| 369 vertices: seq[Vec3f] | |
| 370 colors: seq[Vec4f] | |
| 371 normals: seq[Vec3f] | |
| 372 | |
| 373 # front, red | |
| 374 vertices.add quad.transf(Translate(0, 0, -0.5)) | |
| 375 colors.add newSeqWith(6, NewVec4f(1, 0, 0, 1)) | |
| 376 normals.add newSeqWith(6, NewVec3f(0, 0, -1)) | |
| 377 | |
| 378 # back, cyan | |
| 379 vertices.add quad.transf(Rotate(PI, Y) * Translate(0, 0, -0.5)) | |
| 380 colors.add newSeqWith(6, NewVec4f(0, 1, 1, 1)) | |
| 381 normals.add newSeqWith(6, NewVec3f(0, 0, 1)) | |
| 382 | |
| 383 # right, green | |
| 384 vertices.add quad.transf(Rotate(PI / 2, Y) * Translate(0, 0, -0.5)) | |
| 385 colors.add newSeqWith(6, NewVec4f(0, 1, 0, 1)) | |
| 386 normals.add newSeqWith(6, NewVec3f(-1, 0, 0)) | |
| 387 | |
| 388 # left, magenta | |
| 389 vertices.add quad.transf(Rotate(-PI / 2, Y) * Translate(0, 0, -0.5)) | |
| 390 colors.add newSeqWith(6, NewVec4f(1, 0, 1, 1)) | |
| 391 normals.add newSeqWith(6, NewVec3f(1, 0, 0)) | |
| 392 | |
| 393 # bottom, blue | |
| 394 vertices.add quad.transf(Rotate(PI / 2, X) * Translate(0, 0, -0.5)) | |
| 395 colors.add newSeqWith(6, NewVec4f(0, 0, 1, 1)) | |
| 396 normals.add newSeqWith(6, NewVec3f(0, -1, 0)) | |
| 397 | |
| 398 # top, yellow | |
| 399 vertices.add quad.transf(Rotate(-PI / 2, X) * Translate(0, 0, -0.5)) | |
| 400 colors.add newSeqWith(6, NewVec4f(1, 1, 0, 1)) | |
| 401 normals.add newSeqWith(6, NewVec3f(0, 1, 0)) | |
| 402 | |
| 403 var renderdata = InitRenderData() | |
| 404 | |
| 405 var mesh = Mesh( | |
| 406 position: asGPUArray(vertices, VertexBuffer), | |
| 407 color: asGPUArray(colors, VertexBuffer), | |
| 408 normals: asGPUArray(normals, VertexBuffer), | |
| 409 ) | |
| 410 AssignBuffers(renderdata, mesh) | |
| 411 | |
| 412 var floor = Mesh( | |
| 413 position: asGPUArray(quad.transf(Scale(10, 10, 10) * Rotate(-PI / 2, X) * Translate(0, 0, 0.05)), VertexBuffer), | |
| 414 color: asGPUArray(newSeqWith(6, NewVec4f(0.1, 0.1, 0.1, 1)), VertexBuffer), | |
| 415 normals: asGPUArray(newSeqWith(6, Y), VertexBuffer), | |
| 416 ) | |
| 417 AssignBuffers(renderdata, floor) | |
| 418 | |
| 419 var uniforms1 = asDescriptorSet( | |
| 420 Uniforms( | |
| 1232 | 421 data: asGPUValue(UniformData(mvp: Unit4), UniformBufferMapped) | 
| 1231 | 422 ) | 
| 423 ) | |
| 424 AssignBuffers(renderdata, uniforms1) | |
| 425 | |
| 426 renderdata.FlushAllMemory() | |
| 427 | |
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
428 var pipeline = CreatePipeline[CubeShader](renderPass = vulkan.swapchain.renderPass) | 
| 1231 | 429 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1) | 
| 430 | |
| 1232 | 431 var tStart = getMonoTime() | 
| 432 var t = tStart | |
| 1231 | 433 | 
| 
1235
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
434 var start = getMonoTime() | 
| 
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
435 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 
| 
1233
 
1cf698973dca
did: cleanup tests and old platform layer files
 
sam <sam@basx.dev> 
parents: 
1232 
diff
changeset
 | 
436 let tStartLoop = getMonoTime() - tStart | 
| 1232 | 437 | 
| 438 uniforms1.data.data.data.mvp = ( | |
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
439 Perspective(-PI / 2, GetAspectRatio(), 0.01, 100) * | 
| 1232 | 440 Translate(0, 0, 2) * | 
| 441 Rotate(PI / 4, X) * | |
| 
1233
 
1cf698973dca
did: cleanup tests and old platform layer files
 
sam <sam@basx.dev> 
parents: 
1232 
diff
changeset
 | 
442 Rotate(PI * 0.1 * (tStartLoop.inMicroseconds() / 1_000_000), Y) | 
| 1232 | 443 ) | 
| 1231 | 444 UpdateGPUBuffer(uniforms1.data.data, flush = true) | 
| 1242 | 445 | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
446 WithNextFrame(framebuffer, commandbuffer): | 
| 1242 | 447 | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
448 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | 
| 1231 | 449 WithPipeline(commandbuffer, pipeline): | 
| 1242 | 450 | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
451 WithBind(commandbuffer, (uniforms1, ), pipeline): | 
| 1231 | 452 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh) | 
| 453 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = floor) | |
| 
1233
 
1cf698973dca
did: cleanup tests and old platform layer files
 
sam <sam@basx.dev> 
parents: 
1232 
diff
changeset
 | 
454 | 
| 
 
1cf698973dca
did: cleanup tests and old platform layer files
 
sam <sam@basx.dev> 
parents: 
1232 
diff
changeset
 | 
455 let tEndLoop = getMonoTime() - tStart | 
| 
 
1cf698973dca
did: cleanup tests and old platform layer files
 
sam <sam@basx.dev> 
parents: 
1232 
diff
changeset
 | 
456 let looptime = tEndLoop - tStartLoop | 
| 
 
1cf698973dca
did: cleanup tests and old platform layer files
 
sam <sam@basx.dev> 
parents: 
1232 
diff
changeset
 | 
457 let waitTime = 16_666 - looptime.inMicroseconds | 
| 
 
1cf698973dca
did: cleanup tests and old platform layer files
 
sam <sam@basx.dev> 
parents: 
1232 
diff
changeset
 | 
458 if waitTime > 0: | 
| 
 
1cf698973dca
did: cleanup tests and old platform layer files
 
sam <sam@basx.dev> 
parents: 
1232 
diff
changeset
 | 
459 sleep((waitTime / 1000).int) | 
| 1231 | 460 | 
| 461 # cleanup | |
| 462 checkVkResult vkDeviceWaitIdle(vulkan.device) | |
| 463 DestroyPipeline(pipeline) | |
| 464 DestroyRenderData(renderdata) | |
| 465 | |
| 
1240
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
466 proc test_06_different_draw_modes(time: float32) = | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
467 var renderdata = InitRenderData() | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
468 | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
469 type | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
470 Shader = object | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
471 position {.VertexAttribute.}: Vec3f | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
472 color {.VertexAttribute.}: Vec3f | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
473 fragmentColor {.Pass.}: Vec3f | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
474 outColor {.ShaderOutput.}: Vec4f | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
475 # code | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
476 vertexCode: string = """void main() { | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
477 gl_PointSize = 100; | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
478 fragmentColor = color; | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
479 gl_Position = vec4(position, 1);}""" | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
480 fragmentCode: string = """void main() { | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
481 outColor = vec4(fragmentColor, 1);}""" | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
482 TriangleMesh = object | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
483 position: GPUArray[Vec3f, VertexBuffer] | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
484 color: GPUArray[Vec3f, VertexBuffer] | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
485 var triangle = TriangleMesh( | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
486 position: asGPUArray([NewVec3f(-0.5, -0.5), NewVec3f(0, 0.5), NewVec3f(0.5, -0.5)], VertexBuffer), | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
487 color: asGPUArray([NewVec3f(0, 0, 1), NewVec3f(0, 1, 0), NewVec3f(1, 0, 0)], VertexBuffer), | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
488 ) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
489 var lines = TriangleMesh( | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
490 position: asGPUArray([NewVec3f(-0.9, 0), NewVec3f(-0.05, -0.9), NewVec3f(0.05, -0.9), NewVec3f(0.9, 0)], VertexBuffer), | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
491 color: asGPUArray([NewVec3f(1, 1, 0), NewVec3f(1, 1, 0), NewVec3f(0, 1, 0), NewVec3f(0, 1, 0)], VertexBuffer), | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
492 ) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
493 AssignBuffers(renderdata, triangle) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
494 AssignBuffers(renderdata, lines) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
495 renderdata.FlushAllMemory() | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
496 | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
497 var pipeline1 = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass, polygonMode = VK_POLYGON_MODE_LINE, lineWidth = 20'f32) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
498 var pipeline2 = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass, polygonMode = VK_POLYGON_MODE_POINT) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
499 var pipeline3 = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass, topology = VK_PRIMITIVE_TOPOLOGY_LINE_LIST, lineWidth = 5) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
500 var pipeline4 = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass, topology = VK_PRIMITIVE_TOPOLOGY_POINT_LIST) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
501 | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
502 var start = getMonoTime() | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
503 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
504 WithNextFrame(framebuffer, commandbuffer): | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
505 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
506 WithPipeline(commandbuffer, pipeline1): | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
507 Render(commandbuffer = commandbuffer, pipeline = pipeline1, mesh = triangle) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
508 WithPipeline(commandbuffer, pipeline2): | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
509 Render(commandbuffer = commandbuffer, pipeline = pipeline2, mesh = triangle) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
510 WithPipeline(commandbuffer, pipeline3): | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
511 Render(commandbuffer = commandbuffer, pipeline = pipeline3, mesh = lines) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
512 WithPipeline(commandbuffer, pipeline4): | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
513 Render(commandbuffer = commandbuffer, pipeline = pipeline4, mesh = lines) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
514 | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
515 # cleanup | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
516 checkVkResult vkDeviceWaitIdle(vulkan.device) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
517 DestroyPipeline(pipeline1) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
518 DestroyPipeline(pipeline2) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
519 DestroyPipeline(pipeline3) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
520 DestroyPipeline(pipeline4) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
521 DestroyRenderData(renderdata) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
522 | 
| 1242 | 523 proc test_07_png_texture(time: float32) = | 
| 524 var renderdata = InitRenderData() | |
| 525 | |
| 526 type | |
| 527 Uniforms = object | |
| 1252 | 528 texture1: Image[BGRA] | 
| 1242 | 529 Shader = object | 
| 530 position {.VertexAttribute.}: Vec3f | |
| 531 uv {.VertexAttribute.}: Vec2f | |
| 532 fragmentUv {.Pass.}: Vec2f | |
| 533 outColor {.ShaderOutput.}: Vec4f | |
| 534 descriptorSets {.DescriptorSets.}: (Uniforms, ) | |
| 535 # code | |
| 536 vertexCode: string = """ | |
| 537 void main() { | |
| 538 fragmentUv = uv; | |
| 539 gl_Position = vec4(position, 1); | |
| 540 }""" | |
| 541 fragmentCode: string = """ | |
| 542 void main() { | |
| 543 outColor = texture(texture1, fragmentUv); | |
| 544 }""" | |
| 545 Quad = object | |
| 546 position: GPUArray[Vec3f, VertexBuffer] | |
| 547 uv: GPUArray[Vec2f, VertexBuffer] | |
| 548 var mesh = Quad( | |
| 549 position: asGPUArray([ | |
| 550 NewVec3f(-0.8, -0.5), NewVec3f(-0.8, 0.5), NewVec3f(0.8, 0.5), | |
| 551 NewVec3f(0.8, 0.5), NewVec3f(0.8, -0.5), NewVec3f(-0.8, -0.5), | |
| 552 ], VertexBuffer), | |
| 553 uv: asGPUArray([ | |
| 554 NewVec2f(0, 1), NewVec2f(0, 0), NewVec2f(1, 0), | |
| 555 NewVec2f(1, 0), NewVec2f(1, 1), NewVec2f(0, 1), | |
| 556 ], VertexBuffer), | |
| 557 ) | |
| 558 AssignBuffers(renderdata, mesh) | |
| 559 renderdata.FlushAllMemory() | |
| 560 | |
| 561 var pipeline = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass) | |
| 562 var uniforms1 = asDescriptorSet( | |
| 563 Uniforms( | |
| 1252 | 564 texture1: LoadImage[BGRA]("art.png"), | 
| 1242 | 565 ) | 
| 566 ) | |
| 567 UploadImages(renderdata, uniforms1) | |
| 568 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1) | |
| 569 | |
| 570 var start = getMonoTime() | |
| 571 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | |
| 572 | |
| 573 WithNextFrame(framebuffer, commandbuffer): | |
| 574 | |
| 575 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | |
| 576 | |
| 577 WithPipeline(commandbuffer, pipeline): | |
| 578 | |
| 579 WithBind(commandbuffer, (uniforms1, ), pipeline): | |
| 580 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh) | |
| 581 | |
| 582 # cleanup | |
| 583 checkVkResult vkDeviceWaitIdle(vulkan.device) | |
| 584 DestroyPipeline(pipeline) | |
| 585 DestroyRenderData(renderdata) | |
| 586 | |
| 587 proc test_08_triangle_2pass(time: float32, depthBuffer: bool, samples: VkSampleCountFlagBits) = | |
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
588 var (offscreenRP, presentRP) = CreateIndirectPresentationRenderPass(depthBuffer = depthBuffer, samples = samples) | 
| 
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
589 | 
| 
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
590 SetupSwapchain(renderpass = presentRP) | 
| 
1214
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
591 | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
592 var renderdata = InitRenderData() | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
593 | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
594 type | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
595 Uniforms = object | 
| 1252 | 596 frameTexture: Image[BGRA] | 
| 
1214
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
597 TriangleShader = object | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
598 position {.VertexAttribute.}: Vec3f | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
599 color {.VertexAttribute.}: Vec3f | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
600 fragmentColor {.Pass.}: Vec3f | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
601 outColor {.ShaderOutput.}: Vec4f | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
602 # code | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
603 vertexCode: string = """void main() { | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
604 fragmentColor = color; | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
605 gl_Position = vec4(position, 1);}""" | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
606 fragmentCode: string = """void main() { | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
607 outColor = vec4(fragmentColor, 1);}""" | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
608 PresentShader = object | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
609 position {.VertexAttribute.}: Vec2f | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
610 uv {.Pass.}: Vec2f | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
611 outColor {.ShaderOutput.}: Vec4f | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
612 descriptorSets {.DescriptorSets.}: (Uniforms, ) | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
613 # code | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
614 vertexCode: string = """void main() { | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
615 uv = ((position + 1) * 0.5) * vec2(1, -1); | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
616 gl_Position = vec4(position, 0, 1);}""" | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
617 fragmentCode: string = """void main() { | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
618 vec2 uv1 = uv + vec2(0.001, 0.001); | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
619 vec2 uv2 = uv + vec2(0.001, -0.001); | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
620 vec2 uv3 = uv + vec2(-0.001, 0.001); | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
621 vec2 uv4 = uv + vec2(-0.001, -0.001); | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
622 outColor = ( | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
623 texture(frameTexture, uv1) + | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
624 texture(frameTexture, uv2) + | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
625 texture(frameTexture, uv3) + | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
626 texture(frameTexture, uv4) | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
627 ) / 4; | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
628 }""" | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
629 TriangleMesh = object | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
630 position: GPUArray[Vec3f, VertexBuffer] | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
631 color: GPUArray[Vec3f, VertexBuffer] | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
632 QuadMesh = object | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
633 position: GPUArray[Vec2f, VertexBuffer] | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
634 indices: GPUArray[uint16, IndexBuffer] | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
635 var mesh = TriangleMesh( | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
636 position: asGPUArray([NewVec3f(-0.5, -0.5), NewVec3f(0, 0.5), NewVec3f(0.5, -0.5)], VertexBuffer), | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
637 color: asGPUArray([NewVec3f(0, 0, 1), NewVec3f(0, 1, 0), NewVec3f(1, 0, 0)], VertexBuffer), | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
638 ) | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
639 var quad = QuadMesh( | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
640 position: asGPUArray([NewVec2f(-1, -1), NewVec2f(-1, 1), NewVec2f(1, 1), NewVec2f(1, -1)], VertexBuffer), | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
641 indices: asGPUArray([0'u16, 1'u16, 2'u16, 2'u16, 3'u16, 0'u16], IndexBuffer), | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
642 ) | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
643 var uniforms1 = asDescriptorSet( | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
644 Uniforms( | 
| 1252 | 645 frameTexture: Image[BGRA](width: vulkan.swapchain.width, height: vulkan.swapchain.height, isRenderTarget: true), | 
| 
1214
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
646 ) | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
647 ) | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
648 AssignBuffers(renderdata, mesh) | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
649 AssignBuffers(renderdata, quad) | 
| 1228 | 650 UploadImages(renderdata, uniforms1) | 
| 
1214
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
651 renderdata.FlushAllMemory() | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
652 | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
653 var | 
| 
1229
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
654 drawPipeline = CreatePipeline[TriangleShader](renderPass = offscreenRP) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
655 presentPipeline = CreatePipeline[PresentShader](renderPass = presentRP) | 
| 
1214
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
656 | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
657 InitDescriptorSet(renderdata, presentPipeline.descriptorSetLayouts[0], uniforms1) | 
| 
1229
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
658 | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
659 # create depth buffer images (will not use the one in the swapchain | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
660 var | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
661 depthImage: VkImage | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
662 depthImageView: VkImageView | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
663 depthMemory: VkDeviceMemory | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
664 if offscreenRP.depthBuffer: | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
665 depthImage = svkCreate2DImage( | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
666 width = vulkan.swapchain.width, | 
| 
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
667 height = vulkan.swapchain.height, | 
| 
1229
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
668 format = DEPTH_FORMAT, | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
669 usage = [VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT], | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
670 samples = offscreenRP.samples, | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
671 ) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
672 let requirements = svkGetImageMemoryRequirements(depthImage) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
673 depthMemory = svkAllocateMemory( | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
674 requirements.size, | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
675 BestMemory(mappable = false, filter = requirements.memoryTypes) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
676 ) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
677 checkVkResult vkBindImageMemory( | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
678 vulkan.device, | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
679 depthImage, | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
680 depthMemory, | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
681 0, | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
682 ) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
683 depthImageView = svkCreate2DImageView( | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
684 image = depthImage, | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
685 format = DEPTH_FORMAT, | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
686 aspect = VK_IMAGE_ASPECT_DEPTH_BIT | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
687 ) | 
| 
1214
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
688 | 
| 
1229
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
689 # create msaa images (will not use the one in the swapchain | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
690 var | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
691 msaaImage: VkImage | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
692 msaaImageView: VkImageView | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
693 msaaMemory: VkDeviceMemory | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
694 if offscreenRP.samples != VK_SAMPLE_COUNT_1_BIT: | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
695 msaaImage = svkCreate2DImage( | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
696 width = vulkan.swapchain.width, | 
| 
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
697 height = vulkan.swapchain.height, | 
| 
1229
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
698 format = SURFACE_FORMAT, | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
699 usage = [VK_IMAGE_USAGE_SAMPLED_BIT, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT], | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
700 samples = offscreenRP.samples, | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
701 ) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
702 let requirements = svkGetImageMemoryRequirements(msaaImage) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
703 msaaMemory = svkAllocateMemory( | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
704 requirements.size, | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
705 BestMemory(mappable = false, filter = requirements.memoryTypes) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
706 ) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
707 checkVkResult vkBindImageMemory( | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
708 vulkan.device, | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
709 msaaImage, | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
710 msaaMemory, | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
711 0, | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
712 ) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
713 msaaImageView = svkCreate2DImageView(image = msaaImage, format = SURFACE_FORMAT) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
714 | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
715 var attachments: seq[VkImageView] | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
716 if offscreenRP.samples == VK_SAMPLE_COUNT_1_BIT: | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
717 if offscreenRP.depthBuffer: | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
718 attachments = @[uniforms1.data.frameTexture.imageview, depthImageView] | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
719 else: | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
720 attachments = @[uniforms1.data.frameTexture.imageview] | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
721 else: | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
722 if offscreenRP.depthBuffer: | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
723 attachments = @[msaaImageView, depthImageView, uniforms1.data.frameTexture.imageview] | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
724 else: | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
725 attachments = @[msaaImageView, uniforms1.data.frameTexture.imageview] | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
726 var offscreenFB = svkCreateFramebuffer( | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
727 offscreenRP.vk, | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
728 vulkan.swapchain.width, | 
| 
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
729 vulkan.swapchain.height, | 
| 
1229
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
730 attachments | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
731 ) | 
| 
1214
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
732 | 
| 
1235
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
733 var start = getMonoTime() | 
| 
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
734 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 
| 
1214
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
735 | 
| 1242 | 736 WithNextFrame(framebuffer, commandbuffer): | 
| 737 | |
| 738 WithRenderPass(offscreenRP, offscreenFB, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | |
| 739 WithPipeline(commandbuffer, drawPipeline): | |
| 740 Render(commandbuffer = commandbuffer, pipeline = drawPipeline, mesh = mesh) | |
| 
1214
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
741 | 
| 1242 | 742 WithRenderPass(presentRP, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | 
| 
1214
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
743 | 
| 1242 | 744 WithPipeline(commandbuffer, presentPipeline): | 
| 745 | |
| 746 WithBind(commandbuffer, (uniforms1, ), presentPipeline): | |
| 747 Render(commandbuffer = commandbuffer, pipeline = presentPipeline, mesh = quad) | |
| 
1214
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
748 | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
749 # cleanup | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
750 checkVkResult vkDeviceWaitIdle(vulkan.device) | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
751 DestroyPipeline(presentPipeline) | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
752 DestroyPipeline(drawPipeline) | 
| 
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
753 DestroyRenderData(renderdata) | 
| 
1229
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
754 if depthImage.Valid: | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
755 vkDestroyImageView(vulkan.device, depthImageView, nil) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
756 vkDestroyImage(vulkan.device, depthImage, nil) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
757 vkFreeMemory(vulkan.device, depthMemory, nil) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
758 if msaaImage.Valid: | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
759 vkDestroyImageView(vulkan.device, msaaImageView, nil) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
760 vkDestroyImage(vulkan.device, msaaImage, nil) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
761 vkFreeMemory(vulkan.device, msaaMemory, nil) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
762 vkDestroyRenderPass(vulkan.device, offscreenRP.vk, nil) | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
763 vkDestroyRenderPass(vulkan.device, presentRP.vk, nil) | 
| 
1214
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
764 vkDestroyFramebuffer(vulkan.device, offscreenFB, nil) | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
765 ClearSwapchain() | 
| 
1214
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
766 | 
| 1204 | 767 when isMainModule: | 
| 
1235
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
768 var time = 1'f32 | 
| 1204 | 769 InitVulkan() | 
| 770 | |
| 
1229
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
771 var mainRenderpass: RenderPass | 
| 
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
772 var renderPasses = [ | 
| 
1235
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
773 (depthBuffer: false, samples: VK_SAMPLE_COUNT_1_BIT), | 
| 
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
774 (depthBuffer: false, samples: VK_SAMPLE_COUNT_4_BIT), | 
| 
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
775 (depthBuffer: true, samples: VK_SAMPLE_COUNT_1_BIT), | 
| 
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
776 (depthBuffer: true, samples: VK_SAMPLE_COUNT_4_BIT), | 
| 
1229
 
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
 
sam <sam@basx.dev> 
parents: 
1228 
diff
changeset
 | 
777 ] | 
| 
1214
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
778 | 
| 
1240
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
779 | 
| 1204 | 780 # test normal | 
| 1230 | 781 for i, (depthBuffer, samples) in renderPasses: | 
| 782 var renderpass = CreateDirectPresentationRenderPass(depthBuffer = depthBuffer, samples = samples) | |
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
783 SetupSwapchain(renderpass = renderpass) | 
| 1204 | 784 | 
| 1230 | 785 # tests a simple triangle with minimalistic shader and vertex format | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
786 test_01_triangle(time) | 
| 1230 | 787 | 
| 788 # tests instanced triangles and quads, mixing meshes and instances | |
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
789 test_02_triangle_quad_instanced(time) | 
| 1210 | 790 | 
| 1230 | 791 # teste descriptor sets | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
792 test_03_simple_descriptorset(time) | 
| 1204 | 793 | 
| 1230 | 794 # tests multiple descriptor sets and arrays | 
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
795 test_04_multiple_descriptorsets(time) | 
| 1231 | 796 | 
| 797 # rotating cube | |
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
798 test_05_cube(time) | 
| 1204 | 799 | 
| 
1240
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
800 # different draw modes (lines, points, and topologies) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
801 test_06_different_draw_modes(time) | 
| 
 
42eeb59f3a43
add: more tests, line and point rendering
 
sam <sam@basx.dev> 
parents: 
1239 
diff
changeset
 | 
802 | 
| 1242 | 803 # load PNG texture | 
| 804 test_07_png_texture(time) | |
| 805 | |
| 1230 | 806 checkVkResult vkDeviceWaitIdle(vulkan.device) | 
| 807 vkDestroyRenderPass(vulkan.device, renderpass.vk, nil) | |
| 
1239
 
69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
 
sam <sam@basx.dev> 
parents: 
1235 
diff
changeset
 | 
808 ClearSwapchain() | 
| 1204 | 809 | 
| 
1214
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
810 # test multiple render passes | 
| 
1235
 
c70fee6568f6
did: improv render tests to run without user input
 
sam <sam@basx.dev> 
parents: 
1233 
diff
changeset
 | 
811 for i, (depthBuffer, samples) in renderPasses: | 
| 1242 | 812 test_08_triangle_2pass(time, depthBuffer, samples) | 
| 
1214
 
04e446a7eb2b
add: multipass renderer, finish tets for now
 
sam <sam@basx.dev> 
parents: 
1213 
diff
changeset
 | 
813 | 
| 1203 | 814 DestroyVulkan() | 
