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) |