Mercurial > games > semicongine
comparison tests/test_rendering.nim @ 1280:a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
| author | sam <sam@basx.dev> |
|---|---|
| date | Mon, 29 Jul 2024 15:49:37 +0700 |
| parents | 01138e6257dd |
| children | 0369fa1ffbd9 |
comparison
equal
deleted
inserted
replaced
| 1277:01138e6257dd | 1280:a89a70ea3da2 |
|---|---|
| 27 outColor = vec4(fragmentColor, 1);}""" | 27 outColor = vec4(fragmentColor, 1);}""" |
| 28 TriangleMesh = object | 28 TriangleMesh = object |
| 29 position: GPUArray[Vec3f, VertexBuffer] | 29 position: GPUArray[Vec3f, VertexBuffer] |
| 30 color: GPUArray[Vec3f, VertexBuffer] | 30 color: GPUArray[Vec3f, VertexBuffer] |
| 31 var mesh = TriangleMesh( | 31 var mesh = TriangleMesh( |
| 32 position: asGPUArray([NewVec3f(-0.5, -0.5), NewVec3f(0, 0.5), NewVec3f(0.5, -0.5)], VertexBuffer), | 32 position: asGPUArray([vec3(-0.5, -0.5, 0), vec3(0, 0.5, 0), vec3(0.5, -0.5, 0)], VertexBuffer), |
| 33 color: asGPUArray([NewVec3f(0, 0, 1), NewVec3f(0, 1, 0), NewVec3f(1, 0, 0)], VertexBuffer), | 33 color: asGPUArray([vec3(0, 0, 1), vec3(0, 1, 0), vec3(1, 0, 0)], VertexBuffer), |
| 34 ) | 34 ) |
| 35 AssignBuffers(renderdata, mesh) | 35 AssignBuffers(renderdata, mesh) |
| 36 renderdata.FlushAllMemory() | 36 renderdata.FlushAllMemory() |
| 37 | 37 |
| 38 var pipeline = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass) | 38 var pipeline = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass) |
| 40 var start = getMonoTime() | 40 var start = getMonoTime() |
| 41 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 41 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
| 42 | 42 |
| 43 WithNextFrame(framebuffer, commandbuffer): | 43 WithNextFrame(framebuffer, commandbuffer): |
| 44 | 44 |
| 45 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | 45 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)): |
| 46 | 46 |
| 47 WithPipeline(commandbuffer, pipeline): | 47 WithPipeline(commandbuffer, pipeline): |
| 48 | 48 |
| 49 RenderWithPushConstant(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh, pushConstant = PushConstant(scale: 0.3 + ((getMonoTime() - start).inMilliseconds().int / 1000))) | 49 RenderWithPushConstant(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh, pushConstant = PushConstant(scale: 0.3 + ((getMonoTime() - start).inMilliseconds().int / 1000))) |
| 50 | 50 |
| 80 indices: GPUArray[uint16, IndexBuffer] | 80 indices: GPUArray[uint16, IndexBuffer] |
| 81 Instances = object | 81 Instances = object |
| 82 pos: GPUArray[Vec3f, VertexBuffer] | 82 pos: GPUArray[Vec3f, VertexBuffer] |
| 83 scale: GPUArray[float32, VertexBuffer] | 83 scale: GPUArray[float32, VertexBuffer] |
| 84 var tri = TriangleMesh( | 84 var tri = TriangleMesh( |
| 85 position: asGPUArray([NewVec3f(-0.5, -0.5), NewVec3f(0, 0.5), NewVec3f(0.5, -0.5)], VertexBuffer), | 85 position: asGPUArray([vec3(-0.5, -0.5, 0), vec3(0, 0.5, 0), vec3(0.5, -0.5, 0)], VertexBuffer), |
| 86 color: asGPUArray([NewVec3f(0, 0, 1), NewVec3f(0, 1, 0), NewVec3f(1, 0, 0)], VertexBuffer), | 86 color: asGPUArray([vec3(0, 0, 1), vec3(0, 1, 0), vec3(1, 0, 0)], VertexBuffer), |
| 87 ) | 87 ) |
| 88 var quad = QuadMesh( | 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), | 89 position: asGPUArray([vec3(-0.3, -0.3, 0), vec3(-0.3, 0.3, 0), vec3(0.3, 0.3, 0), vec3(0.3, -0.3, 0)], VertexBuffer), |
| 90 indices: asGPUArray([0'u16, 1'u16, 2'u16, 2'u16, 3'u16, 0'u16], IndexBuffer), | 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), | 91 color: asGPUArray([vec3(1, 1, 1), vec3(1, 1, 1), vec3(1, 1, 1), vec3(1, 1, 1)], VertexBuffer), |
| 92 ) | 92 ) |
| 93 | 93 |
| 94 var instancesA: Instances | 94 var instancesA: Instances |
| 95 for n in 1..100: | 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)) | 96 instancesA.pos.data.add vec3(rand(-0.8'f32 .. 0.8'f32), rand(-0.8'f32 .. 0'f32), 0) |
| 97 instancesA.scale.data.add rand(0.3'f32 .. 0.4'f32) | 97 instancesA.scale.data.add rand(0.3'f32 .. 0.4'f32) |
| 98 var instancesB: Instances | 98 var instancesB: Instances |
| 99 for n in 1..100: | 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)) | 100 instancesB.pos.data.add vec3(rand(-0.8'f32 .. 0.8'f32), rand(0'f32 .. 0.8'f32), 0) |
| 101 instancesB.scale.data.add rand(0.1'f32 .. 0.2'f32) | 101 instancesB.scale.data.add rand(0.1'f32 .. 0.2'f32) |
| 102 | 102 |
| 103 AssignBuffers(renderdata, tri) | 103 AssignBuffers(renderdata, tri) |
| 104 AssignBuffers(renderdata, quad) | 104 AssignBuffers(renderdata, quad) |
| 105 AssignBuffers(renderdata, instancesA) | 105 AssignBuffers(renderdata, instancesA) |
| 111 var start = getMonoTime() | 111 var start = getMonoTime() |
| 112 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 112 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
| 113 | 113 |
| 114 WithNextFrame(framebuffer, commandbuffer): | 114 WithNextFrame(framebuffer, commandbuffer): |
| 115 | 115 |
| 116 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | 116 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)): |
| 117 | 117 |
| 118 WithPipeline(commandbuffer, pipeline): | 118 WithPipeline(commandbuffer, pipeline): |
| 119 | 119 |
| 120 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad, instances = instancesA) | 120 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad, instances = instancesA) |
| 121 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad, instances = instancesB) | 121 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad, instances = instancesB) |
| 161 let G = BGRA([0'u8, 255'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]) | 162 let B = BGRA([0'u8, 0'u8, 255'u8, 255'u8]) |
| 163 let W = BGRA([255'u8, 255'u8, 255'u8, 255'u8]) | 163 let W = BGRA([255'u8, 255'u8, 255'u8, 255'u8]) |
| 164 var | 164 var |
| 165 quad = QuadMesh( | 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), | 166 position: asGPUArray([vec3(-0.5, -0.5, 0), vec3(-0.5, 0.5, 0), vec3(0.5, 0.5, 0), vec3(0.5, -0.5, 0)], VertexBuffer), |
| 167 indices: asGPUArray([0'u16, 1'u16, 2'u16, 2'u16, 3'u16, 0'u16], IndexBuffer), | 167 indices: asGPUArray([0'u16, 1'u16, 2'u16, 2'u16, 3'u16, 0'u16], IndexBuffer), |
| 168 ) | 168 ) |
| 169 uniforms1 = asDescriptorSet( | 169 uniforms1 = asDescriptorSet( |
| 170 Uniforms( | 170 Uniforms( |
| 171 material: asGPUValue(Material(baseColor: NewVec3f(1, 1, 1)), UniformBuffer), | 171 material: asGPUValue(Material(baseColor: vec3(1, 1, 1)), UniformBuffer), |
| 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), | 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), |
| 173 ) | 173 ) |
| 174 ) | 174 ) |
| 175 uniforms2 = asDescriptorSet( | 175 uniforms2 = asDescriptorSet( |
| 176 Uniforms( | 176 Uniforms( |
| 177 material: asGPUValue(Material(baseColor: NewVec3f(0.5, 0.5, 0.5)), UniformBuffer), | 177 material: asGPUValue(Material(baseColor: vec3(0.5, 0.5, 0.5)), UniformBuffer), |
| 178 texture1: Image[BGRA](width: 2, height: 2, data: @[R, G, B, W]), | 178 texture1: Image[BGRA](width: 2, height: 2, data: @[R, G, B, W]), |
| 179 ) | 179 ) |
| 180 ) | 180 ) |
| 181 | 181 |
| 182 AssignBuffers(renderdata, quad) | 182 AssignBuffers(renderdata, quad) |
| 194 var start = getMonoTime() | 194 var start = getMonoTime() |
| 195 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 195 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
| 196 | 196 |
| 197 WithNextFrame(framebuffer, commandbuffer): | 197 WithNextFrame(framebuffer, commandbuffer): |
| 198 | 198 |
| 199 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | 199 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)): |
| 200 | 200 |
| 201 WithPipeline(commandbuffer, pipeline): | 201 WithPipeline(commandbuffer, pipeline): |
| 202 | 202 |
| 203 WithBind(commandbuffer, (uniforms1, ), pipeline): | 203 WithBind(commandbuffer, (uniforms1, ), pipeline): |
| 204 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) | 204 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) |
| 254 QuadMesh = object | 254 QuadMesh = object |
| 255 position: GPUArray[Vec3f, VertexBuffer] | 255 position: GPUArray[Vec3f, VertexBuffer] |
| 256 indices: GPUArray[uint16, IndexBuffer] | 256 indices: GPUArray[uint16, IndexBuffer] |
| 257 | 257 |
| 258 var quad = QuadMesh( | 258 var quad = QuadMesh( |
| 259 position: asGPUArray([NewVec3f(-0.5, -0.5), NewVec3f(-0.5, 0.5), NewVec3f(0.5, 0.5), NewVec3f(0.5, -0.5)], VertexBuffer), | 259 position: asGPUArray([vec3(-0.5, -0.5), vec3(-0.5, 0.5), vec3(0.5, 0.5), vec3(0.5, -0.5)], VertexBuffer), |
| 260 indices: asGPUArray([0'u16, 1'u16, 2'u16, 2'u16, 3'u16, 0'u16], IndexBuffer), | 260 indices: asGPUArray([0'u16, 1'u16, 2'u16, 2'u16, 3'u16, 0'u16], IndexBuffer), |
| 261 ) | 261 ) |
| 262 var constset = asDescriptorSet( | 262 var constset = asDescriptorSet( |
| 263 ConstSet( | 263 ConstSet( |
| 264 constants: asGPUValue(Constants(offset: NewVec2f(-0.3, 0.2)), UniformBuffer), | 264 constants: asGPUValue(Constants(offset: vec2(-0.3, 0.2)), UniformBuffer), |
| 265 ) | 265 ) |
| 266 ) | 266 ) |
| 267 let G = Gray([50'u8]) | 267 let G = Gray([50'u8]) |
| 268 let W = Gray([255'u8]) | 268 let W = Gray([255'u8]) |
| 269 var mainset = asDescriptorSet( | 269 var mainset = asDescriptorSet( |
| 270 MainSet( | 270 MainSet( |
| 271 renderSettings: asGPUValue(RenderSettings(brigthness: 0), UniformBufferMapped), | 271 renderSettings: asGPUValue(RenderSettings(brigthness: 0), UniformBufferMapped), |
| 272 material: [ | 272 material: [ |
| 273 asGPUValue(Material(baseColor: NewVec3f(1, 1, 0)), UniformBuffer), | 273 asGPUValue(Material(baseColor: vec3(1, 1, 0)), UniformBuffer), |
| 274 asGPUValue(Material(baseColor: NewVec3f(1, 0, 1)), UniformBuffer), | 274 asGPUValue(Material(baseColor: vec3(1, 0, 1)), UniformBuffer), |
| 275 ], | 275 ], |
| 276 texture1: [ | 276 texture1: [ |
| 277 Image[Gray](width: 2, height: 2, data: @[W, G, G, W], minInterpolation: VK_FILTER_NEAREST, magInterpolation: VK_FILTER_NEAREST), | 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), | 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), |
| 279 ], | 279 ], |
| 308 var start = getMonoTime() | 308 var start = getMonoTime() |
| 309 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 309 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
| 310 | 310 |
| 311 WithNextFrame(framebuffer, commandbuffer): | 311 WithNextFrame(framebuffer, commandbuffer): |
| 312 | 312 |
| 313 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | 313 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)): |
| 314 | 314 |
| 315 WithPipeline(commandbuffer, pipeline): | 315 WithPipeline(commandbuffer, pipeline): |
| 316 | 316 |
| 317 WithBind(commandbuffer, (constset, mainset, otherset1), pipeline): | 317 WithBind(commandbuffer, (constset, mainset, otherset1), pipeline): |
| 318 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) | 318 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) |
| 356 position: GPUArray[Vec3f, VertexBuffer] | 356 position: GPUArray[Vec3f, VertexBuffer] |
| 357 normals: GPUArray[Vec3f, VertexBuffer] | 357 normals: GPUArray[Vec3f, VertexBuffer] |
| 358 color: GPUArray[Vec4f, VertexBuffer] | 358 color: GPUArray[Vec4f, VertexBuffer] |
| 359 | 359 |
| 360 let quad = @[ | 360 let quad = @[ |
| 361 NewVec3f(-0.5, -0.5), NewVec3f(-0.5, +0.5), NewVec3f(+0.5, +0.5), | 361 vec3(-0.5, -0.5), vec3(-0.5, +0.5), vec3(+0.5, +0.5), |
| 362 NewVec3f(+0.5, +0.5), NewVec3f(+0.5, -0.5), NewVec3f(-0.5, -0.5), | 362 vec3(+0.5, +0.5), vec3(+0.5, -0.5), vec3(-0.5, -0.5), |
| 363 ] | 363 ] |
| 364 proc transf(data: seq[Vec3f], mat: Mat4): seq[Vec3f] = | 364 proc transf(data: seq[Vec3f], mat: Mat4): seq[Vec3f] = |
| 365 for v in data: | 365 for v in data: |
| 366 result.add mat * v | 366 result.add mat * v |
| 367 | 367 |
| 369 vertices: seq[Vec3f] | 369 vertices: seq[Vec3f] |
| 370 colors: seq[Vec4f] | 370 colors: seq[Vec4f] |
| 371 normals: seq[Vec3f] | 371 normals: seq[Vec3f] |
| 372 | 372 |
| 373 # front, red | 373 # front, red |
| 374 vertices.add quad.transf(Translate(0, 0, -0.5)) | 374 vertices.add quad.transf(translate(0, 0, -0.5)) |
| 375 colors.add newSeqWith(6, NewVec4f(1, 0, 0, 1)) | 375 colors.add newSeqWith(6, vec4(1, 0, 0, 1)) |
| 376 normals.add newSeqWith(6, NewVec3f(0, 0, -1)) | 376 normals.add newSeqWith(6, vec3(0, 0, -1)) |
| 377 | 377 |
| 378 # back, cyan | 378 # back, cyan |
| 379 vertices.add quad.transf(Rotate(PI, Y) * Translate(0, 0, -0.5)) | 379 vertices.add quad.transf(rotate(PI, Y) * translate(0, 0, -0.5)) |
| 380 colors.add newSeqWith(6, NewVec4f(0, 1, 1, 1)) | 380 colors.add newSeqWith(6, vec4(0, 1, 1, 1)) |
| 381 normals.add newSeqWith(6, NewVec3f(0, 0, 1)) | 381 normals.add newSeqWith(6, vec3(0, 0, 1)) |
| 382 | 382 |
| 383 # right, green | 383 # right, green |
| 384 vertices.add quad.transf(Rotate(PI / 2, Y) * Translate(0, 0, -0.5)) | 384 vertices.add quad.transf(rotate(PI / 2, Y) * translate(0, 0, -0.5)) |
| 385 colors.add newSeqWith(6, NewVec4f(0, 1, 0, 1)) | 385 colors.add newSeqWith(6, vec4(0, 1, 0, 1)) |
| 386 normals.add newSeqWith(6, NewVec3f(-1, 0, 0)) | 386 normals.add newSeqWith(6, vec3(-1, 0, 0)) |
| 387 | 387 |
| 388 # left, magenta | 388 # left, magenta |
| 389 vertices.add quad.transf(Rotate(-PI / 2, Y) * Translate(0, 0, -0.5)) | 389 vertices.add quad.transf(rotate(-PI / 2, Y) * translate(0, 0, -0.5)) |
| 390 colors.add newSeqWith(6, NewVec4f(1, 0, 1, 1)) | 390 colors.add newSeqWith(6, vec4(1, 0, 1, 1)) |
| 391 normals.add newSeqWith(6, NewVec3f(1, 0, 0)) | 391 normals.add newSeqWith(6, vec3(1, 0, 0)) |
| 392 | 392 |
| 393 # bottom, blue | 393 # bottom, blue |
| 394 vertices.add quad.transf(Rotate(PI / 2, X) * Translate(0, 0, -0.5)) | 394 vertices.add quad.transf(rotate(PI / 2, X) * translate(0, 0, -0.5)) |
| 395 colors.add newSeqWith(6, NewVec4f(0, 0, 1, 1)) | 395 colors.add newSeqWith(6, vec4(0, 0, 1, 1)) |
| 396 normals.add newSeqWith(6, NewVec3f(0, -1, 0)) | 396 normals.add newSeqWith(6, vec3(0, -1, 0)) |
| 397 | 397 |
| 398 # top, yellow | 398 # top, yellow |
| 399 vertices.add quad.transf(Rotate(-PI / 2, X) * Translate(0, 0, -0.5)) | 399 vertices.add quad.transf(rotate(-PI / 2, X) * translate(0, 0, -0.5)) |
| 400 colors.add newSeqWith(6, NewVec4f(1, 1, 0, 1)) | 400 colors.add newSeqWith(6, vec4(1, 1, 0, 1)) |
| 401 normals.add newSeqWith(6, NewVec3f(0, 1, 0)) | 401 normals.add newSeqWith(6, vec3(0, 1, 0)) |
| 402 | 402 |
| 403 var renderdata = InitRenderData() | 403 var renderdata = InitRenderData() |
| 404 | 404 |
| 405 var mesh = Mesh( | 405 var mesh = Mesh( |
| 406 position: asGPUArray(vertices, VertexBuffer), | 406 position: asGPUArray(vertices, VertexBuffer), |
| 408 normals: asGPUArray(normals, VertexBuffer), | 408 normals: asGPUArray(normals, VertexBuffer), |
| 409 ) | 409 ) |
| 410 AssignBuffers(renderdata, mesh) | 410 AssignBuffers(renderdata, mesh) |
| 411 | 411 |
| 412 var floor = Mesh( | 412 var floor = Mesh( |
| 413 position: asGPUArray(quad.transf(Scale(10, 10, 10) * Rotate(-PI / 2, X) * Translate(0, 0, 0.05)), VertexBuffer), | 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), | 414 color: asGPUArray(newSeqWith(6, vec4(0.1, 0.1, 0.1, 1)), VertexBuffer), |
| 415 normals: asGPUArray(newSeqWith(6, Y), VertexBuffer), | 415 normals: asGPUArray(newSeqWith(6, Y), VertexBuffer), |
| 416 ) | 416 ) |
| 417 AssignBuffers(renderdata, floor) | 417 AssignBuffers(renderdata, floor) |
| 418 | 418 |
| 419 var uniforms1 = asDescriptorSet( | 419 var uniforms1 = asDescriptorSet( |
| 434 var start = getMonoTime() | 434 var start = getMonoTime() |
| 435 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 435 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
| 436 let tStartLoop = getMonoTime() - tStart | 436 let tStartLoop = getMonoTime() - tStart |
| 437 | 437 |
| 438 uniforms1.data.data.data.mvp = ( | 438 uniforms1.data.data.data.mvp = ( |
| 439 Projection(-PI / 2, GetAspectRatio(), 0.01, 100) * | 439 projection(-PI / 2, GetAspectRatio(), 0.01, 100) * |
| 440 Translate(0, 0, 2) * | 440 translate(0, 0, 2) * |
| 441 Rotate(PI / 4, X) * | 441 rotate(PI / 4, X) * |
| 442 Rotate(PI * 0.1 * (tStartLoop.inMicroseconds() / 1_000_000), Y) | 442 rotate(PI * 0.1 * (tStartLoop.inMicroseconds() / 1_000_000), Y) |
| 443 ) | 443 ) |
| 444 UpdateGPUBuffer(uniforms1.data.data, flush = true) | 444 UpdateGPUBuffer(uniforms1.data.data, flush = true) |
| 445 | 445 |
| 446 WithNextFrame(framebuffer, commandbuffer): | 446 WithNextFrame(framebuffer, commandbuffer): |
| 447 | 447 |
| 448 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | 448 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)): |
| 449 WithPipeline(commandbuffer, pipeline): | 449 WithPipeline(commandbuffer, pipeline): |
| 450 | 450 |
| 451 WithBind(commandbuffer, (uniforms1, ), pipeline): | 451 WithBind(commandbuffer, (uniforms1, ), pipeline): |
| 452 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh) | 452 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh) |
| 453 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = floor) | 453 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = floor) |
| 481 outColor = vec4(fragmentColor, 1);}""" | 481 outColor = vec4(fragmentColor, 1);}""" |
| 482 TriangleMesh = object | 482 TriangleMesh = object |
| 483 position: GPUArray[Vec3f, VertexBuffer] | 483 position: GPUArray[Vec3f, VertexBuffer] |
| 484 color: GPUArray[Vec3f, VertexBuffer] | 484 color: GPUArray[Vec3f, VertexBuffer] |
| 485 var triangle = TriangleMesh( | 485 var triangle = TriangleMesh( |
| 486 position: asGPUArray([NewVec3f(-0.5, -0.5), NewVec3f(0, 0.5), NewVec3f(0.5, -0.5)], VertexBuffer), | 486 position: asGPUArray([vec3(-0.5, -0.5, 0), vec3(0, 0.5, 0), vec3(0.5, -0.5, 0)], VertexBuffer), |
| 487 color: asGPUArray([NewVec3f(0, 0, 1), NewVec3f(0, 1, 0), NewVec3f(1, 0, 0)], VertexBuffer), | 487 color: asGPUArray([vec3(0, 0, 1), vec3(0, 1, 0), vec3(1, 0, 0)], VertexBuffer), |
| 488 ) | 488 ) |
| 489 var lines = TriangleMesh( | 489 var lines = TriangleMesh( |
| 490 position: asGPUArray([NewVec3f(-0.9, 0), NewVec3f(-0.05, -0.9), NewVec3f(0.05, -0.9), NewVec3f(0.9, 0)], VertexBuffer), | 490 position: asGPUArray([vec3(-0.9, 0, 0), vec3(-0.05, -0.9, 0), vec3(0.05, -0.9, 0), vec3(0.9, 0, 0)], VertexBuffer), |
| 491 color: asGPUArray([NewVec3f(1, 1, 0), NewVec3f(1, 1, 0), NewVec3f(0, 1, 0), NewVec3f(0, 1, 0)], VertexBuffer), | 491 color: asGPUArray([vec3(1, 1, 0), vec3(1, 1, 0), vec3(0, 1, 0), vec3(0, 1, 0)], VertexBuffer), |
| 492 ) | 492 ) |
| 493 AssignBuffers(renderdata, triangle) | 493 AssignBuffers(renderdata, triangle) |
| 494 AssignBuffers(renderdata, lines) | 494 AssignBuffers(renderdata, lines) |
| 495 renderdata.FlushAllMemory() | 495 renderdata.FlushAllMemory() |
| 496 | 496 |
| 500 var pipeline4 = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass, topology = VK_PRIMITIVE_TOPOLOGY_POINT_LIST) | 500 var pipeline4 = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass, topology = VK_PRIMITIVE_TOPOLOGY_POINT_LIST) |
| 501 | 501 |
| 502 var start = getMonoTime() | 502 var start = getMonoTime() |
| 503 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 503 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
| 504 WithNextFrame(framebuffer, commandbuffer): | 504 WithNextFrame(framebuffer, commandbuffer): |
| 505 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | 505 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)): |
| 506 WithPipeline(commandbuffer, pipeline1): | 506 WithPipeline(commandbuffer, pipeline1): |
| 507 Render(commandbuffer = commandbuffer, pipeline = pipeline1, mesh = triangle) | 507 Render(commandbuffer = commandbuffer, pipeline = pipeline1, mesh = triangle) |
| 508 WithPipeline(commandbuffer, pipeline2): | 508 WithPipeline(commandbuffer, pipeline2): |
| 509 Render(commandbuffer = commandbuffer, pipeline = pipeline2, mesh = triangle) | 509 Render(commandbuffer = commandbuffer, pipeline = pipeline2, mesh = triangle) |
| 510 WithPipeline(commandbuffer, pipeline3): | 510 WithPipeline(commandbuffer, pipeline3): |
| 545 Quad = object | 545 Quad = object |
| 546 position: GPUArray[Vec3f, VertexBuffer] | 546 position: GPUArray[Vec3f, VertexBuffer] |
| 547 uv: GPUArray[Vec2f, VertexBuffer] | 547 uv: GPUArray[Vec2f, VertexBuffer] |
| 548 var mesh = Quad( | 548 var mesh = Quad( |
| 549 position: asGPUArray([ | 549 position: asGPUArray([ |
| 550 NewVec3f(-0.8, -0.5), NewVec3f(-0.8, 0.5), NewVec3f(0.8, 0.5), | 550 vec3(-0.8, -0.5), vec3(-0.8, 0.5), vec3(0.8, 0.5), |
| 551 NewVec3f(0.8, 0.5), NewVec3f(0.8, -0.5), NewVec3f(-0.8, -0.5), | 551 vec3(0.8, 0.5), vec3(0.8, -0.5), vec3(-0.8, -0.5), |
| 552 ], VertexBuffer), | 552 ], VertexBuffer), |
| 553 uv: asGPUArray([ | 553 uv: asGPUArray([ |
| 554 NewVec2f(0, 1), NewVec2f(0, 0), NewVec2f(1, 0), | 554 vec2(0, 1), vec2(0, 0), vec2(1, 0), |
| 555 NewVec2f(1, 0), NewVec2f(1, 1), NewVec2f(0, 1), | 555 vec2(1, 0), vec2(1, 1), vec2(0, 1), |
| 556 ], VertexBuffer), | 556 ], VertexBuffer), |
| 557 ) | 557 ) |
| 558 AssignBuffers(renderdata, mesh) | 558 AssignBuffers(renderdata, mesh) |
| 559 renderdata.FlushAllMemory() | 559 renderdata.FlushAllMemory() |
| 560 | 560 |
| 570 var start = getMonoTime() | 570 var start = getMonoTime() |
| 571 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 571 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
| 572 | 572 |
| 573 WithNextFrame(framebuffer, commandbuffer): | 573 WithNextFrame(framebuffer, commandbuffer): |
| 574 | 574 |
| 575 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | 575 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)): |
| 576 | 576 |
| 577 WithPipeline(commandbuffer, pipeline): | 577 WithPipeline(commandbuffer, pipeline): |
| 578 | 578 |
| 579 WithBind(commandbuffer, (uniforms1, ), pipeline): | 579 WithBind(commandbuffer, (uniforms1, ), pipeline): |
| 580 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh) | 580 Render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh) |
| 631 color: GPUArray[Vec3f, VertexBuffer] | 631 color: GPUArray[Vec3f, VertexBuffer] |
| 632 QuadMesh = object | 632 QuadMesh = object |
| 633 position: GPUArray[Vec2f, VertexBuffer] | 633 position: GPUArray[Vec2f, VertexBuffer] |
| 634 indices: GPUArray[uint16, IndexBuffer] | 634 indices: GPUArray[uint16, IndexBuffer] |
| 635 var mesh = TriangleMesh( | 635 var mesh = TriangleMesh( |
| 636 position: asGPUArray([NewVec3f(-0.5, -0.5), NewVec3f(0, 0.5), NewVec3f(0.5, -0.5)], VertexBuffer), | 636 position: asGPUArray([vec3(-0.5, -0.5), vec3(0, 0.5), vec3(0.5, -0.5)], VertexBuffer), |
| 637 color: asGPUArray([NewVec3f(0, 0, 1), NewVec3f(0, 1, 0), NewVec3f(1, 0, 0)], VertexBuffer), | 637 color: asGPUArray([vec3(0, 0, 1), vec3(0, 1, 0), vec3(1, 0, 0)], VertexBuffer), |
| 638 ) | 638 ) |
| 639 var quad = QuadMesh( | 639 var quad = QuadMesh( |
| 640 position: asGPUArray([NewVec2f(-1, -1), NewVec2f(-1, 1), NewVec2f(1, 1), NewVec2f(1, -1)], VertexBuffer), | 640 position: asGPUArray([vec2(-1, -1), vec2(-1, 1), vec2(1, 1), vec2(1, -1)], VertexBuffer), |
| 641 indices: asGPUArray([0'u16, 1'u16, 2'u16, 2'u16, 3'u16, 0'u16], IndexBuffer), | 641 indices: asGPUArray([0'u16, 1'u16, 2'u16, 2'u16, 3'u16, 0'u16], IndexBuffer), |
| 642 ) | 642 ) |
| 643 var uniforms1 = asDescriptorSet( | 643 var uniforms1 = asDescriptorSet( |
| 644 Uniforms( | 644 Uniforms( |
| 645 frameTexture: Image[BGRA](width: vulkan.swapchain.width, height: vulkan.swapchain.height, isRenderTarget: true), | 645 frameTexture: Image[BGRA](width: vulkan.swapchain.width, height: vulkan.swapchain.height, isRenderTarget: true), |
| 733 var start = getMonoTime() | 733 var start = getMonoTime() |
| 734 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | 734 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
| 735 | 735 |
| 736 WithNextFrame(framebuffer, commandbuffer): | 736 WithNextFrame(framebuffer, commandbuffer): |
| 737 | 737 |
| 738 WithRenderPass(offscreenRP, offscreenFB, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | 738 WithRenderPass(offscreenRP, offscreenFB, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)): |
| 739 WithPipeline(commandbuffer, drawPipeline): | 739 WithPipeline(commandbuffer, drawPipeline): |
| 740 Render(commandbuffer = commandbuffer, pipeline = drawPipeline, mesh = mesh) | 740 Render(commandbuffer = commandbuffer, pipeline = drawPipeline, mesh = mesh) |
| 741 | 741 |
| 742 WithRenderPass(presentRP, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | 742 WithRenderPass(presentRP, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)): |
| 743 | 743 |
| 744 WithPipeline(commandbuffer, presentPipeline): | 744 WithPipeline(commandbuffer, presentPipeline): |
| 745 | 745 |
| 746 WithBind(commandbuffer, (uniforms1, ), presentPipeline): | 746 WithBind(commandbuffer, (uniforms1, ), presentPipeline): |
| 747 Render(commandbuffer = commandbuffer, pipeline = presentPipeline, mesh = quad) | 747 Render(commandbuffer = commandbuffer, pipeline = presentPipeline, mesh = quad) |
