Mercurial > games > semicongine
annotate tests/test_rendering.nim @ 1490:81da4be50663
did: some stuff
| author | sam <sam@basx.dev> |
|---|---|
| date | Fri, 23 May 2025 23:42:19 +0700 |
| parents | 676fc13685a9 |
| children | d3d667bbdda4 |
| 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 |
|
1299
6d0162bfe48a
did: finish mentioned refactoring, no API changes still
sam <sam@basx.dev>
parents:
1285
diff
changeset
|
3 import std/math |
| 1232 | 4 import std/monotimes |
| 5 import std/times | |
| 1203 | 6 import std/options |
| 1204 | 7 import std/random |
| 8 | |
| 1267 | 9 import ../semicongine |
| 1427 | 10 import ../semicongine/rendering |
| 11 import ../semicongine/input | |
| 12 import ../semicongine/loaders | |
| 1203 | 13 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
14 proc test_01_triangle(time: float32, renderPass: RenderPass) = |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
15 var renderdata = initRenderData() |
| 1203 | 16 |
| 17 type | |
| 1252 | 18 PushConstant = object |
| 19 scale: float32 | |
| 1332 | 20 |
| 1242 | 21 Shader = object |
| 1203 | 22 position {.VertexAttribute.}: Vec3f |
| 23 color {.VertexAttribute.}: Vec3f | |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
24 pushConstant {.PushConstant.}: PushConstant |
| 1203 | 25 fragmentColor {.Pass.}: Vec3f |
| 26 outColor {.ShaderOutput.}: Vec4f | |
| 27 # code | |
| 1332 | 28 vertexCode: string = |
| 29 """void main() { | |
| 1203 | 30 fragmentColor = color; |
| 1252 | 31 gl_Position = vec4(position * pushConstant.scale, 1);}""" |
| 1332 | 32 fragmentCode: string = |
| 33 """void main() { | |
| 1203 | 34 outColor = vec4(fragmentColor, 1);}""" |
| 1332 | 35 |
| 1203 | 36 TriangleMesh = object |
| 37 position: GPUArray[Vec3f, VertexBuffer] | |
| 38 color: GPUArray[Vec3f, VertexBuffer] | |
| 1332 | 39 |
| 1203 | 40 var mesh = TriangleMesh( |
| 1332 | 41 position: asGPUArray( |
| 42 [vec3(-0.5, -0.5, 0), vec3(0, 0.5, 0), vec3(0.5, -0.5, 0)], VertexBuffer | |
| 43 ), | |
|
1280
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
44 color: asGPUArray([vec3(0, 0, 1), vec3(0, 1, 0), vec3(1, 0, 0)], VertexBuffer), |
| 1203 | 45 ) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
46 assignBuffers(renderdata, mesh) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
47 renderdata.flushAllMemory() |
| 1203 | 48 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
49 var pipeline = createPipeline(Shader(), renderPass = renderPass) |
| 1203 | 50 |
|
1235
c70fee6568f6
did: improv render tests to run without user input
sam <sam@basx.dev>
parents:
1233
diff
changeset
|
51 var start = getMonoTime() |
|
c70fee6568f6
did: improv render tests to run without user input
sam <sam@basx.dev>
parents:
1233
diff
changeset
|
52 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
53 withNextFrame(framebuffer, commandbuffer): |
| 1332 | 54 withRenderPass( |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
55 renderPass, |
| 1332 | 56 framebuffer, |
| 57 commandbuffer, | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
58 frameWidth(), |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
59 frameHeight(), |
| 1332 | 60 vec4(0, 0, 0, 0), |
| 61 ): | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
62 withPipeline(commandbuffer, pipeline): |
| 1332 | 63 renderWithPushConstant( |
| 64 commandbuffer = commandbuffer, | |
| 65 pipeline = pipeline, | |
| 66 mesh = mesh, | |
| 67 pushConstant = PushConstant( | |
| 68 scale: 0.3 + ((getMonoTime() - start).inMilliseconds().int / 1000) | |
| 69 ), | |
| 70 ) | |
| 1203 | 71 |
| 72 # cleanup | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
73 checkVkResult vkDeviceWaitIdle(engine().vulkan.device) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
74 destroyPipeline(pipeline) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
75 destroyRenderData(renderdata) |
| 1203 | 76 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
77 proc test_02_triangle_quad_instanced(time: float32, renderPass: RenderPass) = |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
78 var renderdata = initRenderData() |
| 1204 | 79 |
| 80 type | |
| 81 SomeShader = object | |
| 82 position {.VertexAttribute.}: Vec3f | |
| 83 color {.VertexAttribute.}: Vec3f | |
| 84 pos {.InstanceAttribute.}: Vec3f | |
| 85 scale {.InstanceAttribute.}: float32 | |
| 86 fragmentColor {.Pass.}: Vec3f | |
| 87 outColor {.ShaderOutput.}: Vec4f | |
| 88 # code | |
| 1332 | 89 vertexCode: string = |
| 90 """void main() { | |
| 1204 | 91 fragmentColor = color; |
| 92 gl_Position = vec4((position * scale) + pos, 1);}""" | |
| 1332 | 93 fragmentCode: string = |
| 94 """void main() { | |
| 1204 | 95 outColor = vec4(fragmentColor, 1);}""" |
| 1332 | 96 |
| 1204 | 97 TriangleMesh = object |
| 98 position: GPUArray[Vec3f, VertexBuffer] | |
| 99 color: GPUArray[Vec3f, VertexBuffer] | |
| 1332 | 100 |
| 1204 | 101 QuadMesh = object |
| 102 position: GPUArray[Vec3f, VertexBuffer] | |
| 103 color: GPUArray[Vec3f, VertexBuffer] | |
| 104 indices: GPUArray[uint16, IndexBuffer] | |
| 1332 | 105 |
| 1204 | 106 Instances = object |
| 107 pos: GPUArray[Vec3f, VertexBuffer] | |
| 108 scale: GPUArray[float32, VertexBuffer] | |
| 1332 | 109 |
| 1204 | 110 var tri = TriangleMesh( |
| 1332 | 111 position: asGPUArray( |
| 112 [vec3(-0.5, -0.5, 0), vec3(0, 0.5, 0), vec3(0.5, -0.5, 0)], VertexBuffer | |
| 113 ), | |
|
1280
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
114 color: asGPUArray([vec3(0, 0, 1), vec3(0, 1, 0), vec3(1, 0, 0)], VertexBuffer), |
| 1204 | 115 ) |
| 116 var quad = QuadMesh( | |
| 1332 | 117 position: asGPUArray( |
| 118 [vec3(-0.3, -0.3, 0), vec3(-0.3, 0.3, 0), vec3(0.3, 0.3, 0), vec3(0.3, -0.3, 0)], | |
| 119 VertexBuffer, | |
| 120 ), | |
| 1204 | 121 indices: asGPUArray([0'u16, 1'u16, 2'u16, 2'u16, 3'u16, 0'u16], IndexBuffer), |
| 1332 | 122 color: asGPUArray( |
| 123 [vec3(1, 1, 1), vec3(1, 1, 1), vec3(1, 1, 1), vec3(1, 1, 1)], VertexBuffer | |
| 124 ), | |
| 1204 | 125 ) |
| 126 | |
| 127 var instancesA: Instances | |
| 1332 | 128 for n in 1 .. 100: |
|
1280
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
129 instancesA.pos.data.add vec3(rand(-0.8'f32 .. 0.8'f32), rand(-0.8'f32 .. 0'f32), 0) |
| 1204 | 130 instancesA.scale.data.add rand(0.3'f32 .. 0.4'f32) |
| 131 var instancesB: Instances | |
| 1332 | 132 for n in 1 .. 100: |
|
1280
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
133 instancesB.pos.data.add vec3(rand(-0.8'f32 .. 0.8'f32), rand(0'f32 .. 0.8'f32), 0) |
| 1204 | 134 instancesB.scale.data.add rand(0.1'f32 .. 0.2'f32) |
| 135 | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
136 assignBuffers(renderdata, tri) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
137 assignBuffers(renderdata, quad) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
138 assignBuffers(renderdata, instancesA) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
139 assignBuffers(renderdata, instancesB) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
140 renderdata.flushAllMemory() |
| 1204 | 141 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
142 var pipeline = createPipeline(SomeShader(), renderPass = renderPass) |
| 1204 | 143 |
|
1235
c70fee6568f6
did: improv render tests to run without user input
sam <sam@basx.dev>
parents:
1233
diff
changeset
|
144 var start = getMonoTime() |
|
c70fee6568f6
did: improv render tests to run without user input
sam <sam@basx.dev>
parents:
1233
diff
changeset
|
145 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
146 withNextFrame(framebuffer, commandbuffer): |
| 1332 | 147 withRenderPass( |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
148 renderPass, |
| 1332 | 149 framebuffer, |
| 150 commandbuffer, | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
151 frameWidth(), |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
152 frameHeight(), |
| 1332 | 153 vec4(0, 0, 0, 0), |
| 154 ): | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
155 withPipeline(commandbuffer, pipeline): |
| 1332 | 156 render( |
| 157 commandbuffer = commandbuffer, | |
| 158 pipeline = pipeline, | |
| 159 mesh = quad, | |
| 160 instances = instancesA, | |
| 161 ) | |
| 162 render( | |
| 163 commandbuffer = commandbuffer, | |
| 164 pipeline = pipeline, | |
| 165 mesh = quad, | |
| 166 instances = instancesB, | |
| 167 ) | |
| 168 render( | |
| 169 commandbuffer = commandbuffer, | |
| 170 pipeline = pipeline, | |
| 171 mesh = tri, | |
| 172 instances = instancesA, | |
| 173 ) | |
| 174 render( | |
| 175 commandbuffer = commandbuffer, | |
| 176 pipeline = pipeline, | |
| 177 mesh = tri, | |
| 178 instances = instancesB, | |
| 179 ) | |
| 1204 | 180 |
| 181 # cleanup | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
182 checkVkResult vkDeviceWaitIdle(engine().vulkan.device) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
183 destroyPipeline(pipeline) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
184 destroyRenderData(renderdata) |
| 1204 | 185 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
186 proc test_03_simple_descriptorset(time: float32, renderPass: RenderPass) = |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
187 var renderdata = initRenderData() |
| 1210 | 188 |
| 189 type | |
| 190 Material = object | |
| 191 baseColor: Vec3f | |
| 192 | |
| 193 Uniforms = object | |
| 194 material: GPUValue[Material, UniformBuffer] | |
| 1252 | 195 texture1: Image[BGRA] |
| 1210 | 196 |
| 197 QuadShader = object | |
| 198 position {.VertexAttribute.}: Vec3f | |
| 199 fragmentColor {.Pass.}: Vec3f | |
| 200 uv {.Pass.}: Vec2f | |
| 201 outColor {.ShaderOutput.}: Vec4f | |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
202 descriptorSets {.DescriptorSet: 0.}: Uniforms |
| 1210 | 203 # code |
| 1332 | 204 vertexCode: string = |
| 205 """void main() { | |
| 1210 | 206 fragmentColor = material.baseColor; |
| 207 gl_Position = vec4(position, 1); | |
| 208 gl_Position.x += ((material.baseColor.b - 0.5) * 2) - 0.5; | |
| 209 uv = position.xy + 0.5; | |
| 210 }""" | |
| 1332 | 211 fragmentCode: string = |
| 212 """void main() { | |
| 1210 | 213 outColor = vec4(fragmentColor, 1) * texture(texture1, uv);}""" |
| 1332 | 214 |
| 1210 | 215 QuadMesh = object |
| 216 position: GPUArray[Vec3f, VertexBuffer] | |
| 217 indices: GPUArray[uint16, IndexBuffer] | |
| 218 | |
| 1252 | 219 let R = BGRA([255'u8, 0'u8, 0'u8, 255'u8]) |
| 220 let G = BGRA([0'u8, 255'u8, 0'u8, 255'u8]) | |
| 221 let B = BGRA([0'u8, 0'u8, 255'u8, 255'u8]) | |
| 222 let W = BGRA([255'u8, 255'u8, 255'u8, 255'u8]) | |
| 1210 | 223 var |
| 224 quad = QuadMesh( | |
| 1332 | 225 position: asGPUArray( |
| 226 [vec3(-0.5, -0.5, 0), vec3(-0.5, 0.5, 0), vec3(0.5, 0.5, 0), vec3(0.5, -0.5, 0)], | |
| 227 VertexBuffer, | |
| 228 ), | |
| 1210 | 229 indices: asGPUArray([0'u16, 1'u16, 2'u16, 2'u16, 3'u16, 0'u16], IndexBuffer), |
| 230 ) | |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
231 uniforms1 = asDescriptorSetData( |
| 1210 | 232 Uniforms( |
|
1280
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
233 material: asGPUValue(Material(baseColor: vec3(1, 1, 1)), UniformBuffer), |
| 1332 | 234 texture1: Image[BGRA]( |
| 235 width: 3, | |
| 236 height: 3, | |
| 237 data: @[R, G, B, G, B, R, B, R, G], | |
| 238 minInterpolation: VK_FILTER_NEAREST, | |
| 239 magInterpolation: VK_FILTER_NEAREST, | |
| 240 ), | |
| 1210 | 241 ) |
| 242 ) | |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
243 uniforms2 = asDescriptorSetData( |
| 1210 | 244 Uniforms( |
|
1280
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
245 material: asGPUValue(Material(baseColor: vec3(0.5, 0.5, 0.5)), UniformBuffer), |
| 1252 | 246 texture1: Image[BGRA](width: 2, height: 2, data: @[R, G, B, W]), |
| 1332 | 247 ) |
| 1210 | 248 ) |
| 249 | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
250 assignBuffers(renderdata, quad) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
251 assignBuffers(renderdata, uniforms1) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
252 assignBuffers(renderdata, uniforms2) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
253 uploadImages(renderdata, uniforms1) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
254 uploadImages(renderdata, uniforms2) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
255 renderdata.flushAllMemory() |
| 1210 | 256 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
257 var pipeline = createPipeline(QuadShader(), renderPass = renderPass) |
| 1210 | 258 |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
259 initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
260 initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms2) |
| 1210 | 261 |
|
1235
c70fee6568f6
did: improv render tests to run without user input
sam <sam@basx.dev>
parents:
1233
diff
changeset
|
262 var start = getMonoTime() |
|
c70fee6568f6
did: improv render tests to run without user input
sam <sam@basx.dev>
parents:
1233
diff
changeset
|
263 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
264 withNextFrame(framebuffer, commandbuffer): |
| 1332 | 265 withRenderPass( |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
266 renderPass, |
| 1332 | 267 framebuffer, |
| 268 commandbuffer, | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
269 frameWidth(), |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
270 frameHeight(), |
| 1332 | 271 vec4(0, 0, 0, 0), |
| 272 ): | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
273 withPipeline(commandbuffer, pipeline): |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
274 bindDescriptorSet(commandbuffer, uniforms1, 0, pipeline) |
|
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
275 render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) |
| 1242 | 276 |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
277 bindDescriptorSet(commandbuffer, uniforms2, 0, pipeline) |
|
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
278 render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) |
| 1210 | 279 |
| 280 # cleanup | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
281 checkVkResult vkDeviceWaitIdle(engine().vulkan.device) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
282 destroyPipeline(pipeline) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
283 destroyRenderData(renderdata) |
| 1210 | 284 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
285 proc test_04_multiple_descriptorsets(time: float32, renderPass: RenderPass) = |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
286 var renderdata = initRenderData() |
| 1203 | 287 |
| 1204 | 288 type |
| 289 RenderSettings = object | |
| 1209 | 290 brigthness: float32 |
| 1332 | 291 |
| 1210 | 292 Material = object |
| 293 baseColor: Vec3f | |
| 1332 | 294 |
| 1209 | 295 ObjectSettings = object |
| 1210 | 296 scale: float32 |
| 297 materialIndex: uint32 | |
| 1332 | 298 |
| 1210 | 299 Constants = object |
| 300 offset: Vec2f | |
| 301 | |
| 302 ConstSet = object | |
| 303 constants: GPUValue[Constants, UniformBuffer] | |
| 1332 | 304 |
| 1209 | 305 MainSet = object |
| 306 renderSettings: GPUValue[RenderSettings, UniformBufferMapped] | |
| 1210 | 307 material: array[2, GPUValue[Material, UniformBuffer]] |
| 1242 | 308 texture1: array[2, Image[Gray]] |
| 1332 | 309 |
| 1209 | 310 OtherSet = object |
| 1210 | 311 objectSettings: GPUValue[ObjectSettings, UniformBufferMapped] |
| 1209 | 312 |
| 1204 | 313 QuadShader = object |
| 314 position {.VertexAttribute.}: Vec3f | |
| 315 fragmentColor {.Pass.}: Vec3f | |
| 1210 | 316 uv {.Pass.}: Vec2f |
| 1204 | 317 outColor {.ShaderOutput.}: Vec4f |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
318 descriptorSets0 {.DescriptorSet: 0.}: ConstSet |
|
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
319 descriptorSets1 {.DescriptorSet: 1.}: MainSet |
|
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
320 descriptorSets2 {.DescriptorSet: 2.}: OtherSet |
| 1204 | 321 # code |
| 1332 | 322 vertexCode: string = |
| 323 """void main() { | |
| 1210 | 324 fragmentColor = material[objectSettings.materialIndex].baseColor * renderSettings.brigthness; |
| 325 gl_Position = vec4(position * objectSettings.scale, 1); | |
| 326 gl_Position.xy += constants.offset.xy; | |
| 327 gl_Position.x += material[objectSettings.materialIndex].baseColor.b - 0.5; | |
| 328 uv = position.xy + 0.5; | |
| 329 }""" | |
| 1332 | 330 fragmentCode: string = |
| 331 """void main() { | |
| 1210 | 332 outColor = vec4(fragmentColor * texture(texture1[objectSettings.materialIndex], uv).rrr, 1); |
| 333 }""" | |
| 1332 | 334 |
| 1204 | 335 QuadMesh = object |
| 336 position: GPUArray[Vec3f, VertexBuffer] | |
| 337 indices: GPUArray[uint16, IndexBuffer] | |
| 1203 | 338 |
| 1204 | 339 var quad = QuadMesh( |
| 1332 | 340 position: asGPUArray( |
| 341 [vec3(-0.5, -0.5), vec3(-0.5, 0.5), vec3(0.5, 0.5), vec3(0.5, -0.5)], VertexBuffer | |
| 342 ), | |
| 1204 | 343 indices: asGPUArray([0'u16, 1'u16, 2'u16, 2'u16, 3'u16, 0'u16], IndexBuffer), |
| 1209 | 344 ) |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
345 var constset = asDescriptorSetData( |
| 1332 | 346 ConstSet(constants: asGPUValue(Constants(offset: vec2(-0.3, 0.2)), UniformBuffer)) |
| 1210 | 347 ) |
| 1242 | 348 let G = Gray([50'u8]) |
| 349 let W = Gray([255'u8]) | |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
350 var mainset = asDescriptorSetData( |
| 1209 | 351 MainSet( |
| 352 renderSettings: asGPUValue(RenderSettings(brigthness: 0), UniformBufferMapped), | |
| 1210 | 353 material: [ |
|
1280
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
354 asGPUValue(Material(baseColor: vec3(1, 1, 0)), UniformBuffer), |
|
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
355 asGPUValue(Material(baseColor: vec3(1, 0, 1)), UniformBuffer), |
| 1332 | 356 ], |
| 357 texture1: [ | |
| 358 Image[Gray]( | |
| 359 width: 2, | |
| 360 height: 2, | |
| 361 data: @[W, G, G, W], | |
| 362 minInterpolation: VK_FILTER_NEAREST, | |
| 363 magInterpolation: VK_FILTER_NEAREST, | |
| 364 ), | |
| 365 Image[Gray]( | |
| 366 width: 3, | |
| 367 height: 3, | |
| 368 data: @[W, G, W, G, W, G, W, G, W], | |
| 369 minInterpolation: VK_FILTER_NEAREST, | |
| 370 magInterpolation: VK_FILTER_NEAREST, | |
| 371 ), | |
| 372 ], | |
| 373 ) | |
| 1210 | 374 ) |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
375 var otherset1 = asDescriptorSetData( |
| 1210 | 376 OtherSet( |
| 1332 | 377 objectSettings: |
| 378 asGPUValue(ObjectSettings(scale: 1.0, materialIndex: 0), UniformBufferMapped) | |
| 1209 | 379 ) |
| 1204 | 380 ) |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
381 var otherset2 = asDescriptorSetData( |
| 1209 | 382 OtherSet( |
| 1332 | 383 objectSettings: |
| 384 asGPUValue(ObjectSettings(scale: 1.0, materialIndex: 1), UniformBufferMapped) | |
| 1209 | 385 ) |
| 1204 | 386 ) |
| 1209 | 387 |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
388 assignBuffers(renderdata, quad) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
389 assignBuffers(renderdata, constset) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
390 assignBuffers(renderdata, mainset) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
391 assignBuffers(renderdata, otherset1) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
392 assignBuffers(renderdata, otherset2) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
393 uploadImages(renderdata, mainset) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
394 renderdata.flushAllMemory() |
| 1204 | 395 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
396 var pipeline = createPipeline(QuadShader(), renderPass = renderPass) |
| 1204 | 397 |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
398 initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], constset) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
399 initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[1], mainset) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
400 initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[2], otherset1) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
401 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
|
402 |
|
1235
c70fee6568f6
did: improv render tests to run without user input
sam <sam@basx.dev>
parents:
1233
diff
changeset
|
403 var start = getMonoTime() |
|
c70fee6568f6
did: improv render tests to run without user input
sam <sam@basx.dev>
parents:
1233
diff
changeset
|
404 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
405 withNextFrame(framebuffer, commandbuffer): |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
406 bindDescriptorSet(commandbuffer, constset, 0, pipeline) |
|
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
407 bindDescriptorSet(commandbuffer, mainset, 1, pipeline) |
| 1242 | 408 |
| 1332 | 409 withRenderPass( |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
410 renderPass, |
| 1332 | 411 framebuffer, |
| 412 commandbuffer, | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
413 frameWidth(), |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
414 frameHeight(), |
| 1332 | 415 vec4(0, 0, 0, 0), |
| 416 ): | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
417 withPipeline(commandbuffer, pipeline): |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
418 bindDescriptorSet(commandbuffer, otherset1, 2, pipeline) |
|
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
419 render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) |
| 1242 | 420 |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
421 bindDescriptorSet(commandbuffer, otherset2, 2, pipeline) |
|
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
422 render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = quad) |
| 1242 | 423 |
| 1332 | 424 mainset.data.renderSettings.data.brigthness = |
| 425 ((getMonoTime() - start).inMilliseconds().int / 1000) / time | |
| 426 otherset1.data.objectSettings.data.scale = | |
| 427 0.5 + ((getMonoTime() - start).inMilliseconds().int / 1000) / time | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
428 updateGPUBuffer(mainset.data.renderSettings) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
429 updateGPUBuffer(otherset1.data.objectSettings) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
430 renderdata.flushAllMemory() |
| 1204 | 431 |
| 432 # cleanup | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
433 checkVkResult vkDeviceWaitIdle(engine().vulkan.device) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
434 destroyPipeline(pipeline) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
435 destroyRenderData(renderdata) |
| 1204 | 436 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
437 proc test_05_cube(time: float32, renderPass: RenderPass) = |
| 1231 | 438 type |
| 439 UniformData = object | |
| 1232 | 440 mvp: Mat4 |
| 1332 | 441 |
| 1231 | 442 Uniforms = object |
| 443 data: GPUValue[UniformData, UniformBufferMapped] | |
| 1332 | 444 |
| 1231 | 445 CubeShader = object |
| 446 position {.VertexAttribute.}: Vec3f | |
| 447 color {.VertexAttribute.}: Vec4f | |
| 448 fragmentColor {.Pass.}: Vec4f | |
| 449 outColor {.ShaderOutput.}: Vec4f | |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
450 descriptorSets {.DescriptorSet: 0.}: Uniforms |
| 1231 | 451 # code |
| 1332 | 452 vertexCode = |
| 453 """void main() { | |
| 1231 | 454 fragmentColor = color; |
| 1232 | 455 gl_Position = vec4(position, 1) * data.mvp; |
| 1231 | 456 }""" |
| 1332 | 457 fragmentCode = |
| 458 """void main() { | |
| 1231 | 459 outColor = fragmentColor; |
| 460 }""" | |
| 1332 | 461 |
| 1231 | 462 Mesh = object |
| 463 position: GPUArray[Vec3f, VertexBuffer] | |
| 464 normals: GPUArray[Vec3f, VertexBuffer] | |
| 465 color: GPUArray[Vec4f, VertexBuffer] | |
| 466 | |
| 1332 | 467 let quad = |
| 468 @[ | |
| 469 vec3(-0.5, -0.5), | |
| 470 vec3(-0.5, +0.5), | |
| 471 vec3(+0.5, +0.5), | |
| 472 vec3(+0.5, +0.5), | |
| 473 vec3(+0.5, -0.5), | |
| 474 vec3(-0.5, -0.5), | |
| 475 ] | |
| 1232 | 476 proc transf(data: seq[Vec3f], mat: Mat4): seq[Vec3f] = |
| 1231 | 477 for v in data: |
| 1232 | 478 result.add mat * v |
| 1231 | 479 |
| 480 var | |
| 481 vertices: seq[Vec3f] | |
| 482 colors: seq[Vec4f] | |
| 483 normals: seq[Vec3f] | |
| 484 | |
| 485 # front, red | |
|
1280
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
486 vertices.add quad.transf(translate(0, 0, -0.5)) |
|
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
487 colors.add newSeqWith(6, vec4(1, 0, 0, 1)) |
|
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
488 normals.add newSeqWith(6, vec3(0, 0, -1)) |
| 1231 | 489 |
| 490 # back, cyan | |
|
1280
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
491 vertices.add quad.transf(rotate(PI, Y) * translate(0, 0, -0.5)) |
|
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
492 colors.add newSeqWith(6, vec4(0, 1, 1, 1)) |
|
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
493 normals.add newSeqWith(6, vec3(0, 0, 1)) |
| 1231 | 494 |
| 495 # right, green | |
|
1280
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
496 vertices.add quad.transf(rotate(PI / 2, Y) * translate(0, 0, -0.5)) |
|
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
497 colors.add newSeqWith(6, vec4(0, 1, 0, 1)) |
|
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
498 normals.add newSeqWith(6, vec3(-1, 0, 0)) |
| 1231 | 499 |
| 500 # left, magenta | |
|
1280
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
501 vertices.add quad.transf(rotate(-PI / 2, Y) * translate(0, 0, -0.5)) |
|
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
502 colors.add newSeqWith(6, vec4(1, 0, 1, 1)) |
|
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
503 normals.add newSeqWith(6, vec3(1, 0, 0)) |
| 1231 | 504 |
| 505 # bottom, blue | |
|
1280
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
506 vertices.add quad.transf(rotate(PI / 2, X) * translate(0, 0, -0.5)) |
|
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
507 colors.add newSeqWith(6, vec4(0, 0, 1, 1)) |
|
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
508 normals.add newSeqWith(6, vec3(0, -1, 0)) |
| 1231 | 509 |
| 510 # top, yellow | |
|
1280
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
511 vertices.add quad.transf(rotate(-PI / 2, X) * translate(0, 0, -0.5)) |
|
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
512 colors.add newSeqWith(6, vec4(1, 1, 0, 1)) |
|
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
513 normals.add newSeqWith(6, vec3(0, 1, 0)) |
| 1231 | 514 |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
515 var renderdata = initRenderData() |
| 1231 | 516 |
| 517 var mesh = Mesh( | |
| 518 position: asGPUArray(vertices, VertexBuffer), | |
| 519 color: asGPUArray(colors, VertexBuffer), | |
| 520 normals: asGPUArray(normals, VertexBuffer), | |
| 521 ) | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
522 assignBuffers(renderdata, mesh) |
| 1231 | 523 |
| 524 var floor = Mesh( | |
| 1332 | 525 position: asGPUArray( |
| 526 quad.transf(scale(10, 10, 10) * rotate(-PI / 2, X) * translate(0, 0, 0.05)), | |
| 527 VertexBuffer, | |
| 528 ), | |
|
1280
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
529 color: asGPUArray(newSeqWith(6, vec4(0.1, 0.1, 0.1, 1)), VertexBuffer), |
| 1231 | 530 normals: asGPUArray(newSeqWith(6, Y), VertexBuffer), |
| 531 ) | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
532 assignBuffers(renderdata, floor) |
| 1231 | 533 |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
534 var uniforms1 = asDescriptorSetData( |
| 1332 | 535 Uniforms(data: asGPUValue(UniformData(mvp: Unit4), UniformBufferMapped)) |
| 1231 | 536 ) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
537 assignBuffers(renderdata, uniforms1) |
| 1231 | 538 |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
539 renderdata.flushAllMemory() |
| 1231 | 540 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
541 var pipeline = createPipeline(CubeShader(), renderPass = renderPass) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
542 initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1) |
| 1231 | 543 |
| 1232 | 544 var tStart = getMonoTime() |
| 545 var t = tStart | |
| 1231 | 546 |
|
1235
c70fee6568f6
did: improv render tests to run without user input
sam <sam@basx.dev>
parents:
1233
diff
changeset
|
547 var start = getMonoTime() |
|
c70fee6568f6
did: improv render tests to run without user input
sam <sam@basx.dev>
parents:
1233
diff
changeset
|
548 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
|
549 let tStartLoop = getMonoTime() - tStart |
| 1232 | 550 |
| 551 uniforms1.data.data.data.mvp = ( | |
| 1332 | 552 projection(-PI / 2, getAspectRatio(), 0.01, 100) * translate(0, 0, 2) * |
| 553 rotate(PI / 4, X) * rotate( | |
| 554 PI * 0.1 * (tStartLoop.inMicroseconds() / 1_000_000), Y | |
| 555 ) | |
| 1232 | 556 ) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
557 updateGPUBuffer(uniforms1.data.data, flush = true) |
| 1242 | 558 |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
559 withNextFrame(framebuffer, commandbuffer): |
| 1332 | 560 withRenderPass( |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
561 renderPass, |
| 1332 | 562 framebuffer, |
| 563 commandbuffer, | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
564 frameWidth(), |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
565 frameHeight(), |
| 1332 | 566 vec4(0, 0, 0, 0), |
| 567 ): | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
568 withPipeline(commandbuffer, pipeline): |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
569 bindDescriptorSet(commandbuffer, uniforms1, 0, pipeline) |
|
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
570 render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh) |
|
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
571 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
|
572 |
|
1cf698973dca
did: cleanup tests and old platform layer files
sam <sam@basx.dev>
parents:
1232
diff
changeset
|
573 let tEndLoop = getMonoTime() - tStart |
|
1cf698973dca
did: cleanup tests and old platform layer files
sam <sam@basx.dev>
parents:
1232
diff
changeset
|
574 let looptime = tEndLoop - tStartLoop |
|
1cf698973dca
did: cleanup tests and old platform layer files
sam <sam@basx.dev>
parents:
1232
diff
changeset
|
575 let waitTime = 16_666 - looptime.inMicroseconds |
|
1cf698973dca
did: cleanup tests and old platform layer files
sam <sam@basx.dev>
parents:
1232
diff
changeset
|
576 if waitTime > 0: |
|
1cf698973dca
did: cleanup tests and old platform layer files
sam <sam@basx.dev>
parents:
1232
diff
changeset
|
577 sleep((waitTime / 1000).int) |
| 1231 | 578 |
| 579 # cleanup | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
580 checkVkResult vkDeviceWaitIdle(engine().vulkan.device) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
581 destroyPipeline(pipeline) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
582 destroyRenderData(renderdata) |
| 1231 | 583 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
584 proc test_06_different_draw_modes(time: float32, renderPass: RenderPass) = |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
585 var renderdata = initRenderData() |
|
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
586 |
|
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
587 type |
|
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
588 Shader = object |
|
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
589 position {.VertexAttribute.}: Vec3f |
|
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
590 color {.VertexAttribute.}: Vec3f |
|
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
591 fragmentColor {.Pass.}: Vec3f |
|
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
592 outColor {.ShaderOutput.}: Vec4f |
|
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
593 # code |
| 1332 | 594 vertexCode: string = |
| 595 """void main() { | |
|
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
596 gl_PointSize = 100; |
|
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
597 fragmentColor = color; |
|
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
598 gl_Position = vec4(position, 1);}""" |
| 1332 | 599 fragmentCode: string = |
| 600 """void main() { | |
|
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
601 outColor = vec4(fragmentColor, 1);}""" |
| 1332 | 602 |
|
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
603 TriangleMesh = object |
|
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
604 position: GPUArray[Vec3f, VertexBuffer] |
|
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
605 color: GPUArray[Vec3f, VertexBuffer] |
| 1332 | 606 |
|
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
607 var triangle = TriangleMesh( |
| 1332 | 608 position: asGPUArray( |
| 609 [vec3(-0.5, -0.5, 0), vec3(0, 0.5, 0), vec3(0.5, -0.5, 0)], VertexBuffer | |
| 610 ), | |
|
1280
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
611 color: asGPUArray([vec3(0, 0, 1), vec3(0, 1, 0), vec3(1, 0, 0)], VertexBuffer), |
|
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
612 ) |
|
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
613 var lines = TriangleMesh( |
| 1332 | 614 position: asGPUArray( |
| 615 [vec3(-0.9, 0, 0), vec3(-0.05, -0.9, 0), vec3(0.05, -0.9, 0), vec3(0.9, 0, 0)], | |
| 616 VertexBuffer, | |
| 617 ), | |
| 618 color: asGPUArray( | |
| 619 [vec3(1, 1, 0), vec3(1, 1, 0), vec3(0, 1, 0), vec3(0, 1, 0)], VertexBuffer | |
| 620 ), | |
|
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
621 ) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
622 assignBuffers(renderdata, triangle) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
623 assignBuffers(renderdata, lines) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
624 renderdata.flushAllMemory() |
|
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
625 |
|
1414
5e5a3311ca44
did: small improvment to allow easy adjustment of shader-code
sam <sam@basx.dev>
parents:
1375
diff
changeset
|
626 var pipeline1 = createPipeline( |
|
5e5a3311ca44
did: small improvment to allow easy adjustment of shader-code
sam <sam@basx.dev>
parents:
1375
diff
changeset
|
627 Shader(), |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
628 renderPass = renderPass, |
| 1332 | 629 polygonMode = VK_POLYGON_MODE_LINE, |
| 630 lineWidth = 20'f32, | |
| 631 ) | |
|
1414
5e5a3311ca44
did: small improvment to allow easy adjustment of shader-code
sam <sam@basx.dev>
parents:
1375
diff
changeset
|
632 var pipeline2 = createPipeline( |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
633 Shader(), renderPass = renderPass, polygonMode = VK_POLYGON_MODE_POINT |
| 1332 | 634 ) |
|
1414
5e5a3311ca44
did: small improvment to allow easy adjustment of shader-code
sam <sam@basx.dev>
parents:
1375
diff
changeset
|
635 var pipeline3 = createPipeline( |
|
5e5a3311ca44
did: small improvment to allow easy adjustment of shader-code
sam <sam@basx.dev>
parents:
1375
diff
changeset
|
636 Shader(), |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
637 renderPass = renderPass, |
| 1332 | 638 topology = VK_PRIMITIVE_TOPOLOGY_LINE_LIST, |
| 639 lineWidth = 5, | |
| 640 ) | |
|
1414
5e5a3311ca44
did: small improvment to allow easy adjustment of shader-code
sam <sam@basx.dev>
parents:
1375
diff
changeset
|
641 var pipeline4 = createPipeline( |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
642 Shader(), renderPass = renderPass, topology = VK_PRIMITIVE_TOPOLOGY_POINT_LIST |
| 1332 | 643 ) |
|
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
644 |
|
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
645 var start = getMonoTime() |
|
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
646 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
647 withNextFrame(framebuffer, commandbuffer): |
| 1332 | 648 withRenderPass( |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
649 renderPass, |
| 1332 | 650 framebuffer, |
| 651 commandbuffer, | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
652 frameWidth(), |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
653 frameHeight(), |
| 1332 | 654 vec4(0, 0, 0, 0), |
| 655 ): | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
656 withPipeline(commandbuffer, pipeline1): |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
657 render(commandbuffer = commandbuffer, pipeline = pipeline1, mesh = triangle) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
658 withPipeline(commandbuffer, pipeline2): |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
659 render(commandbuffer = commandbuffer, pipeline = pipeline2, mesh = triangle) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
660 withPipeline(commandbuffer, pipeline3): |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
661 render(commandbuffer = commandbuffer, pipeline = pipeline3, mesh = lines) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
662 withPipeline(commandbuffer, pipeline4): |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
663 render(commandbuffer = commandbuffer, pipeline = pipeline4, mesh = lines) |
|
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
664 |
|
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
665 # cleanup |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
666 checkVkResult vkDeviceWaitIdle(engine().vulkan.device) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
667 destroyPipeline(pipeline1) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
668 destroyPipeline(pipeline2) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
669 destroyPipeline(pipeline3) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
670 destroyPipeline(pipeline4) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
671 destroyRenderData(renderdata) |
|
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
672 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
673 proc test_08_texture_array(time: float32, renderPass: RenderPass) = |
| 1334 | 674 var renderdata = initRenderData() |
| 675 | |
| 676 type | |
| 677 Uniforms = object | |
| 678 textures: ImageArray[BGRA] | |
| 679 | |
| 680 Shader = object | |
| 681 position {.VertexAttribute.}: Vec3f | |
| 682 uv {.VertexAttribute.}: Vec2f | |
| 683 fragmentUv {.Pass.}: Vec2f | |
| 684 outColor {.ShaderOutput.}: Vec4f | |
| 685 descriptorSets {.DescriptorSet: 0.}: Uniforms | |
| 686 # code | |
| 687 vertexCode: string = | |
| 688 """ | |
| 689 void main() { | |
| 690 fragmentUv = uv; | |
| 691 gl_Position = vec4(position, 1); | |
| 692 }""" | |
| 693 fragmentCode: string = | |
| 694 """ | |
| 695 void main() { | |
| 696 vec4 col1 = texture(textures, vec3(fragmentUv, 0)); | |
| 697 vec4 col2 = texture(textures, vec3(fragmentUv, 1)); | |
| 698 float w = length(fragmentUv * 2 - 1) / 1.41421; | |
| 699 outColor = (1 - w) * col1 + w * col2; | |
| 700 }""" | |
| 701 | |
| 702 Quad = object | |
| 703 position: GPUArray[Vec3f, VertexBuffer] | |
| 704 uv: GPUArray[Vec2f, VertexBuffer] | |
| 705 | |
| 706 var mesh = Quad( | |
| 707 position: asGPUArray( | |
| 708 [ | |
| 709 vec3(-0.8, -0.5), | |
| 710 vec3(-0.8, 0.5), | |
| 711 vec3(0.8, 0.5), | |
| 712 vec3(0.8, 0.5), | |
| 713 vec3(0.8, -0.5), | |
| 714 vec3(-0.8, -0.5), | |
| 715 ], | |
| 716 VertexBuffer, | |
| 717 ), | |
| 718 uv: asGPUArray( | |
| 719 [vec2(0, 1), vec2(0, 0), vec2(1, 0), vec2(1, 0), vec2(1, 1), vec2(0, 1)], | |
| 720 VertexBuffer, | |
| 721 ), | |
| 722 ) | |
| 723 assignBuffers(renderdata, mesh) | |
| 724 renderdata.flushAllMemory() | |
| 725 | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
726 var pipeline = createPipeline(Shader(), renderPass = renderPass) |
| 1334 | 727 var uniforms1 = asDescriptorSetData( |
| 728 Uniforms(textures: loadImageArray[BGRA](["art.png", "art1.png"])) | |
| 729 ) | |
| 730 uploadImages(renderdata, uniforms1) | |
| 731 initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1) | |
| 732 | |
| 733 var start = getMonoTime() | |
| 734 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | |
| 735 withNextFrame(framebuffer, commandbuffer): | |
| 736 withRenderPass( | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
737 renderPass, |
| 1334 | 738 framebuffer, |
| 739 commandbuffer, | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
740 frameWidth(), |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
741 frameHeight(), |
| 1334 | 742 vec4(0, 0, 0, 0), |
| 743 ): | |
| 744 withPipeline(commandbuffer, pipeline): | |
| 745 bindDescriptorSet(commandbuffer, uniforms1, 0, pipeline) | |
| 746 render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh) | |
| 747 | |
| 748 # cleanup | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
749 checkVkResult vkDeviceWaitIdle(engine().vulkan.device) |
| 1334 | 750 destroyPipeline(pipeline) |
| 751 destroyRenderData(renderdata) | |
| 752 | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
753 proc test_07_png_texture(time: float32, renderPass: RenderPass) = |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
754 var renderdata = initRenderData() |
| 1242 | 755 |
| 756 type | |
| 757 Uniforms = object | |
| 1252 | 758 texture1: Image[BGRA] |
| 1332 | 759 |
| 1242 | 760 Shader = object |
| 761 position {.VertexAttribute.}: Vec3f | |
| 762 uv {.VertexAttribute.}: Vec2f | |
| 763 fragmentUv {.Pass.}: Vec2f | |
| 764 outColor {.ShaderOutput.}: Vec4f | |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
765 descriptorSets {.DescriptorSet: 0.}: Uniforms |
| 1242 | 766 # code |
| 1332 | 767 vertexCode: string = |
| 768 """ | |
| 1242 | 769 void main() { |
| 770 fragmentUv = uv; | |
| 771 gl_Position = vec4(position, 1); | |
| 772 }""" | |
| 1332 | 773 fragmentCode: string = |
| 774 """ | |
| 1242 | 775 void main() { |
| 776 outColor = texture(texture1, fragmentUv); | |
| 777 }""" | |
| 1332 | 778 |
| 1242 | 779 Quad = object |
| 780 position: GPUArray[Vec3f, VertexBuffer] | |
| 781 uv: GPUArray[Vec2f, VertexBuffer] | |
| 1332 | 782 |
| 1242 | 783 var mesh = Quad( |
| 1332 | 784 position: asGPUArray( |
| 785 [ | |
| 786 vec3(-0.8, -0.5), | |
| 787 vec3(-0.8, 0.5), | |
| 788 vec3(0.8, 0.5), | |
| 789 vec3(0.8, 0.5), | |
| 790 vec3(0.8, -0.5), | |
| 791 vec3(-0.8, -0.5), | |
| 792 ], | |
| 793 VertexBuffer, | |
| 794 ), | |
| 795 uv: asGPUArray( | |
| 796 [vec2(0, 1), vec2(0, 0), vec2(1, 0), vec2(1, 0), vec2(1, 1), vec2(0, 1)], | |
| 797 VertexBuffer, | |
| 798 ), | |
| 1242 | 799 ) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
800 assignBuffers(renderdata, mesh) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
801 renderdata.flushAllMemory() |
| 1242 | 802 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
803 var pipeline = createPipeline(Shader(), renderPass = renderPass) |
| 1332 | 804 var uniforms1 = asDescriptorSetData(Uniforms(texture1: loadImage[BGRA]("art.png"))) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
805 uploadImages(renderdata, uniforms1) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
806 initDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], uniforms1) |
| 1242 | 807 |
| 808 var start = getMonoTime() | |
| 809 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
810 withNextFrame(framebuffer, commandbuffer): |
| 1332 | 811 withRenderPass( |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
812 renderPass, |
| 1332 | 813 framebuffer, |
| 814 commandbuffer, | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
815 frameWidth(), |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
816 frameHeight(), |
| 1332 | 817 vec4(0, 0, 0, 0), |
| 818 ): | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
819 withPipeline(commandbuffer, pipeline): |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
820 bindDescriptorSet(commandbuffer, uniforms1, 0, pipeline) |
|
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
821 render(commandbuffer = commandbuffer, pipeline = pipeline, mesh = mesh) |
| 1242 | 822 |
| 823 # cleanup | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
824 checkVkResult vkDeviceWaitIdle(engine().vulkan.device) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
825 destroyPipeline(pipeline) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
826 destroyRenderData(renderdata) |
| 1242 | 827 |
| 1334 | 828 proc test_09_triangle_2pass( |
| 1332 | 829 time: float32, depthBuffer: bool, samples: VkSampleCountFlagBits |
| 830 ) = | |
| 831 var (offscreenRP, presentRP) = | |
| 832 createIndirectPresentationRenderPass(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
|
833 |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
834 setupSwapchain(renderpass = presentRP) |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
835 |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
836 var renderdata = initRenderData() |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
837 |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
838 type |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
839 Uniforms = object |
| 1252 | 840 frameTexture: Image[BGRA] |
| 1332 | 841 |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
842 TriangleShader = object |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
843 position {.VertexAttribute.}: Vec3f |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
844 color {.VertexAttribute.}: Vec3f |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
845 fragmentColor {.Pass.}: Vec3f |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
846 outColor {.ShaderOutput.}: Vec4f |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
847 # code |
| 1332 | 848 vertexCode: string = |
| 849 """void main() { | |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
850 fragmentColor = color; |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
851 gl_Position = vec4(position, 1);}""" |
| 1332 | 852 fragmentCode: string = |
| 853 """void main() { | |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
854 outColor = vec4(fragmentColor, 1);}""" |
| 1332 | 855 |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
856 PresentShader = object |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
857 position {.VertexAttribute.}: Vec2f |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
858 uv {.Pass.}: Vec2f |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
859 outColor {.ShaderOutput.}: Vec4f |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
860 descriptorSets {.DescriptorSet: 0.}: Uniforms |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
861 # code |
| 1332 | 862 vertexCode: string = |
| 863 """void main() { | |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
864 uv = ((position + 1) * 0.5) * vec2(1, -1); |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
865 gl_Position = vec4(position, 0, 1);}""" |
| 1332 | 866 fragmentCode: string = |
| 867 """void main() { | |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
868 vec2 uv1 = uv + vec2(0.001, 0.001); |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
869 vec2 uv2 = uv + vec2(0.001, -0.001); |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
870 vec2 uv3 = uv + vec2(-0.001, 0.001); |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
871 vec2 uv4 = uv + vec2(-0.001, -0.001); |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
872 outColor = ( |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
873 texture(frameTexture, uv1) + |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
874 texture(frameTexture, uv2) + |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
875 texture(frameTexture, uv3) + |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
876 texture(frameTexture, uv4) |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
877 ) / 4; |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
878 }""" |
| 1332 | 879 |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
880 TriangleMesh = object |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
881 position: GPUArray[Vec3f, VertexBuffer] |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
882 color: GPUArray[Vec3f, VertexBuffer] |
| 1332 | 883 |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
884 QuadMesh = object |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
885 position: GPUArray[Vec2f, VertexBuffer] |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
886 indices: GPUArray[uint16, IndexBuffer] |
| 1332 | 887 |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
888 var mesh = TriangleMesh( |
| 1332 | 889 position: |
| 890 asGPUArray([vec3(-0.5, -0.5), vec3(0, 0.5), vec3(0.5, -0.5)], VertexBuffer), | |
|
1280
a89a70ea3da2
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1277
diff
changeset
|
891 color: asGPUArray([vec3(0, 0, 1), vec3(0, 1, 0), vec3(1, 0, 0)], VertexBuffer), |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
892 ) |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
893 var quad = QuadMesh( |
| 1332 | 894 position: |
| 895 asGPUArray([vec2(-1, -1), vec2(-1, 1), vec2(1, 1), vec2(1, -1)], VertexBuffer), | |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
896 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
|
897 ) |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
898 var uniforms1 = asDescriptorSetData( |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
899 Uniforms( |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
900 frameTexture: |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
901 Image[BGRA](width: frameWidth(), height: frameHeight(), isRenderTarget: true) |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
902 ) |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
903 ) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
904 assignBuffers(renderdata, mesh) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
905 assignBuffers(renderdata, quad) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
906 uploadImages(renderdata, uniforms1) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
907 renderdata.flushAllMemory() |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
908 |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
909 var |
|
1414
5e5a3311ca44
did: small improvment to allow easy adjustment of shader-code
sam <sam@basx.dev>
parents:
1375
diff
changeset
|
910 drawPipeline = createPipeline(TriangleShader(), renderPass = offscreenRP) |
|
5e5a3311ca44
did: small improvment to allow easy adjustment of shader-code
sam <sam@basx.dev>
parents:
1375
diff
changeset
|
911 presentPipeline = createPipeline(PresentShader(), renderPass = presentRP) |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
912 |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
913 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
|
914 |
|
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
915 # 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
|
916 var |
|
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
917 depthImage: VkImage |
|
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
918 depthImageView: VkImageView |
|
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
919 depthMemory: VkDeviceMemory |
|
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
920 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
|
921 depthImage = svkCreate2DImage( |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
922 width = frameWidth(), |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
923 height = frameHeight(), |
|
1229
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
924 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
|
925 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
|
926 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
|
927 ) |
|
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
928 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
|
929 depthMemory = svkAllocateMemory( |
| 1332 | 930 requirements.size, bestMemory(mappable = false, filter = requirements.memoryTypes) |
|
1229
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
931 ) |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
932 checkVkResult vkBindImageMemory(engine().vulkan.device, depthImage, depthMemory, 0) |
|
1229
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
933 depthImageView = svkCreate2DImageView( |
| 1332 | 934 image = depthImage, format = DEPTH_FORMAT, aspect = VK_IMAGE_ASPECT_DEPTH_BIT |
|
1229
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
935 ) |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
936 |
|
1229
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
937 # 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
|
938 var |
|
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
939 msaaImage: VkImage |
|
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
940 msaaImageView: VkImageView |
|
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
941 msaaMemory: VkDeviceMemory |
|
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
942 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
|
943 msaaImage = svkCreate2DImage( |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
944 width = frameWidth(), |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
945 height = frameHeight(), |
|
1229
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
946 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
|
947 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
|
948 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
|
949 ) |
|
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
950 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
|
951 msaaMemory = svkAllocateMemory( |
| 1332 | 952 requirements.size, bestMemory(mappable = false, filter = requirements.memoryTypes) |
|
1229
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
953 ) |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
954 checkVkResult vkBindImageMemory(engine().vulkan.device, msaaImage, msaaMemory, 0) |
|
1229
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
955 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
|
956 |
|
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
957 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
|
958 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
|
959 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
|
960 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
|
961 else: |
|
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
962 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
|
963 else: |
|
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
964 if offscreenRP.depthBuffer: |
| 1332 | 965 attachments = |
| 966 @[msaaImageView, depthImageView, uniforms1.data.frameTexture.imageview] | |
|
1229
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
967 else: |
|
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
968 attachments = @[msaaImageView, uniforms1.data.frameTexture.imageview] |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
969 var offscreenFB = |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
970 svkCreateFramebuffer(offscreenRP.vk, frameWidth(), frameHeight(), attachments) |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
971 |
|
1235
c70fee6568f6
did: improv render tests to run without user input
sam <sam@basx.dev>
parents:
1233
diff
changeset
|
972 var start = getMonoTime() |
|
c70fee6568f6
did: improv render tests to run without user input
sam <sam@basx.dev>
parents:
1233
diff
changeset
|
973 while ((getMonoTime() - start).inMilliseconds().int / 1000) < time: |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
974 withNextFrame(framebuffer, commandbuffer): |
| 1332 | 975 withRenderPass( |
| 976 offscreenRP, | |
| 977 offscreenFB, | |
| 978 commandbuffer, | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
979 frameWidth(), |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
980 frameHeight(), |
| 1332 | 981 vec4(0, 0, 0, 0), |
| 982 ): | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
983 withPipeline(commandbuffer, drawPipeline): |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
984 render(commandbuffer = commandbuffer, pipeline = drawPipeline, mesh = mesh) |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
985 |
| 1332 | 986 withRenderPass( |
| 987 presentRP, | |
| 988 framebuffer, | |
| 989 commandbuffer, | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
990 frameWidth(), |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
991 frameHeight(), |
| 1332 | 992 vec4(0, 0, 0, 0), |
| 993 ): | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
994 withPipeline(commandbuffer, presentPipeline): |
|
1322
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
995 bindDescriptorSet(commandbuffer, uniforms1, 0, presentPipeline) |
|
4a1c2b1128bc
did: improve handling of descriptor sets
sam <sam@basx.dev>
parents:
1299
diff
changeset
|
996 render(commandbuffer = commandbuffer, pipeline = presentPipeline, mesh = quad) |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
997 |
|
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
998 # cleanup |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
999 checkVkResult vkDeviceWaitIdle(engine().vulkan.device) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
1000 destroyPipeline(presentPipeline) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
1001 destroyPipeline(drawPipeline) |
|
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
1002 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
|
1003 if depthImage.Valid: |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
1004 vkDestroyImageView(engine().vulkan.device, depthImageView, nil) |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
1005 vkDestroyImage(engine().vulkan.device, depthImage, nil) |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
1006 vkFreeMemory(engine().vulkan.device, depthMemory, nil) |
|
1229
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
1007 if msaaImage.Valid: |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
1008 vkDestroyImageView(engine().vulkan.device, msaaImageView, nil) |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
1009 vkDestroyImage(engine().vulkan.device, msaaImage, nil) |
|
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
1010 vkFreeMemory(engine().vulkan.device, msaaMemory, nil) |
|
1285
6d16003406fb
add: missing destroy-function for renderpass
sam <sam@basx.dev>
parents:
1283
diff
changeset
|
1011 destroyRenderPass(offscreenRP) |
|
6d16003406fb
add: missing destroy-function for renderpass
sam <sam@basx.dev>
parents:
1283
diff
changeset
|
1012 destroyRenderPass(presentRP) |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
1013 vkDestroyFramebuffer(engine().vulkan.device, offscreenFB, nil) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
1014 clearSwapchain() |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
1015 |
| 1204 | 1016 when isMainModule: |
|
1235
c70fee6568f6
did: improv render tests to run without user input
sam <sam@basx.dev>
parents:
1233
diff
changeset
|
1017 var time = 1'f32 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
1018 initEngine("Test rendering") |
| 1204 | 1019 |
|
1229
5dcb503ef0c0
did: refactor renderpass a bit, enable depth buffering and msaa on offscreen-rendering
sam <sam@basx.dev>
parents:
1228
diff
changeset
|
1020 var renderPasses = [ |
| 1332 | 1021 (depthBuffer: false, samples: VK_SAMPLE_COUNT_1_BIT), |
| 1022 (depthBuffer: false, samples: VK_SAMPLE_COUNT_4_BIT), | |
| 1023 (depthBuffer: true, samples: VK_SAMPLE_COUNT_1_BIT), | |
| 1024 (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
|
1025 ] |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
1026 |
| 1204 | 1027 # test normal |
| 1230 | 1028 for i, (depthBuffer, samples) in renderPasses: |
| 1332 | 1029 var renderpass = |
| 1030 createDirectPresentationRenderPass(depthBuffer = depthBuffer, samples = samples) | |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
1031 setupSwapchain(renderpass = renderpass) |
| 1204 | 1032 |
| 1230 | 1033 # tests a simple triangle with minimalistic shader and vertex format |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
1034 test_01_triangle(time, renderpass) |
| 1230 | 1035 |
| 1036 # tests instanced triangles and quads, mixing meshes and instances | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
1037 test_02_triangle_quad_instanced(time, renderpass) |
| 1210 | 1038 |
| 1230 | 1039 # teste descriptor sets |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
1040 test_03_simple_descriptorset(time, renderpass) |
| 1204 | 1041 |
| 1230 | 1042 # tests multiple descriptor sets and arrays |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
1043 test_04_multiple_descriptorsets(time, renderpass) |
| 1231 | 1044 |
| 1045 # rotating cube | |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
1046 test_05_cube(time, renderpass) |
| 1204 | 1047 |
|
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
1048 # different draw modes (lines, points, and topologies) |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
1049 test_06_different_draw_modes(time, renderpass) |
|
1240
42eeb59f3a43
add: more tests, line and point rendering
sam <sam@basx.dev>
parents:
1239
diff
changeset
|
1050 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
1051 test_07_png_texture(time, renderpass) |
| 1334 | 1052 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
1053 test_08_texture_array(time, renderpass) |
| 1242 | 1054 |
|
1423
3b8a736c45a7
did: put almost all global state into a single struct
sam <sam@basx.dev>
parents:
1414
diff
changeset
|
1055 checkVkResult vkDeviceWaitIdle(engine().vulkan.device) |
|
1285
6d16003406fb
add: missing destroy-function for renderpass
sam <sam@basx.dev>
parents:
1283
diff
changeset
|
1056 destroyRenderPass(renderpass) |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
1057 clearSwapchain() |
| 1204 | 1058 |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
1059 # test multiple render passes |
|
1375
ca3299ea1bdf
did: make vector distinct from arrays, better code for compile-time handling of descriptors
sam <sam@basx.dev>
parents:
1334
diff
changeset
|
1060 for i, (depthBuffer, samples) in renderPasses: |
|
ca3299ea1bdf
did: make vector distinct from arrays, better code for compile-time handling of descriptors
sam <sam@basx.dev>
parents:
1334
diff
changeset
|
1061 test_09_triangle_2pass(time, depthBuffer, samples) |
|
1214
04e446a7eb2b
add: multipass renderer, finish tets for now
sam <sam@basx.dev>
parents:
1213
diff
changeset
|
1062 |
|
1283
0369fa1ffbd9
did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents:
1280
diff
changeset
|
1063 destroyVulkan() |
