Mercurial > games > semicongine
comparison tests/test_gltf.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 | c09cdff9a97e |
comparison
equal
deleted
inserted
replaced
| 1277:01138e6257dd | 1280:a89a70ea3da2 |
|---|---|
| 17 Camera = object | 17 Camera = object |
| 18 view: Mat4 | 18 view: Mat4 |
| 19 normal: Mat4 | 19 normal: Mat4 |
| 20 projection: Mat4 | 20 projection: Mat4 |
| 21 Material = object | 21 Material = object |
| 22 color: Vec4f = NewVec4f(1, 1, 1, 1) | 22 color: Vec4f = vec4(1, 1, 1, 1) |
| 23 # colorTexture: int32 = -1 | 23 # colorTexture: int32 = -1 |
| 24 metallic: float32 = 0 | 24 metallic: float32 = 0 |
| 25 roughness: float32 = 0 | 25 roughness: float32 = 0 |
| 26 # metallicRoughnessTexture: int32 = -1 | 26 # metallicRoughnessTexture: int32 = -1 |
| 27 # normalTexture: int32 = -1 | 27 # normalTexture: int32 = -1 |
| 28 # occlusionTexture: int32 = -1 | 28 # occlusionTexture: int32 = -1 |
| 29 emissive: Vec4f = NewVec4f(0, 0, 0, 0) | 29 emissive: Vec4f = vec4(0, 0, 0, 0) |
| 30 # emissiveTexture: int32 = -1 | 30 # emissiveTexture: int32 = -1 |
| 31 MainDescriptors = object | 31 MainDescriptors = object |
| 32 materials: array[32, GPUValue[Material, UniformBuffer]] | 32 materials: array[32, GPUValue[Material, UniformBuffer]] |
| 33 camera: GPUValue[Camera, UniformBufferMapped] | 33 camera: GPUValue[Camera, UniformBufferMapped] |
| 34 Shader = object | 34 Shader = object |
| 123 ) | 123 ) |
| 124 for i in 0 ..< gltfData.materials.len: | 124 for i in 0 ..< gltfData.materials.len: |
| 125 descriptors.data.materials[i] = asGPUValue(gltfData.materials[i], UniformBuffer) | 125 descriptors.data.materials[i] = asGPUValue(gltfData.materials[i], UniformBuffer) |
| 126 for mesh in mitems(gltfData.meshes): | 126 for mesh in mitems(gltfData.meshes): |
| 127 for primitive in mitems(mesh): | 127 for primitive in mitems(mesh): |
| 128 primitive[0].color = asGPUArray(newSeqWith(primitive[0].position.data.len, NewVec4f(1, 1, 1, 1)), VertexBuffer) | 128 primitive[0].color = asGPUArray(newSeqWith(primitive[0].position.data.len, vec4(1, 1, 1, 1)), VertexBuffer) |
| 129 renderdata.AssignBuffers(primitive[0]) | 129 renderdata.AssignBuffers(primitive[0]) |
| 130 renderdata.AssignBuffers(descriptors) | 130 renderdata.AssignBuffers(descriptors) |
| 131 | 131 |
| 132 var pipeline = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass) | 132 var pipeline = CreatePipeline[Shader](renderPass = vulkan.swapchain.renderPass) |
| 133 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], descriptors) | 133 InitDescriptorSet(renderdata, pipeline.descriptorSetLayouts[0], descriptors) |
| 167 if KeyIsDown(W): forward += 2 | 167 if KeyIsDown(W): forward += 2 |
| 168 if KeyIsDown(S): forward -= 2 | 168 if KeyIsDown(S): forward -= 2 |
| 169 if KeyIsDown(A): sideward -= 2 | 169 if KeyIsDown(A): sideward -= 2 |
| 170 if KeyIsDown(D): sideward += 2 | 170 if KeyIsDown(D): sideward += 2 |
| 171 | 171 |
| 172 let camDir = (Rotate(camYaw, Y) * Rotate(camPitch, X)) * Z | 172 let camDir = (rotate(camYaw, Y) * rotate(camPitch, X)) * Z |
| 173 let camDirSide = camDir.Cross(-Y).Normalized | 173 let camDirSide = camDir.cross(-Y).normalized |
| 174 camPos += camDir * forward * dt | 174 camPos += camDir * forward * dt |
| 175 camPos += camDirSide * sideward * dt | 175 camPos += camDirSide * sideward * dt |
| 176 | 176 |
| 177 let view = Rotate(-camPitch, X) * Rotate(-camYaw, Y) * Translate(-camPos) | 177 let view = rotate(-camPitch, X) * rotate(-camYaw, Y) * translate(-camPos) |
| 178 descriptors.data.camera.data.view = view | 178 descriptors.data.camera.data.view = view |
| 179 descriptors.data.camera.data.normal = view | 179 descriptors.data.camera.data.normal = view |
| 180 descriptors.data.camera.data.projection = Projection(PI / 2, aspect = GetAspectRatio(), zNear = 0.01, zFar = 20) | 180 descriptors.data.camera.data.projection = projection(PI / 2, aspect = GetAspectRatio(), zNear = 0.01, zFar = 20) |
| 181 | 181 |
| 182 UpdateGPUBuffer(descriptors.data.camera) | 182 UpdateGPUBuffer(descriptors.data.camera) |
| 183 | 183 |
| 184 WithNextFrame(framebuffer, commandbuffer): | 184 WithNextFrame(framebuffer, commandbuffer): |
| 185 | 185 |
| 186 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, NewVec4f(0, 0, 0, 0)): | 186 WithRenderPass(vulkan.swapchain.renderPass, framebuffer, commandbuffer, vulkan.swapchain.width, vulkan.swapchain.height, vec4(0, 0, 0, 0)): |
| 187 | 187 |
| 188 WithPipeline(commandbuffer, pipeline): | 188 WithPipeline(commandbuffer, pipeline): |
| 189 WithBind(commandbuffer, (descriptors, ), pipeline): | 189 WithBind(commandbuffer, (descriptors, ), pipeline): |
| 190 for nodeId in gltfData.scenes[0]: | 190 for nodeId in gltfData.scenes[0]: |
| 191 drawNode( | 191 drawNode( |
| 192 commandbuffer = commandbuffer, | 192 commandbuffer = commandbuffer, |
| 193 pipeline = pipeline, | 193 pipeline = pipeline, |
| 194 nodeId = nodeId, | 194 nodeId = nodeId, |
| 195 transform = Rotate(PI / 2, Z) | 195 transform = rotate(PI / 2, Z) |
| 196 ) | 196 ) |
| 197 | 197 |
| 198 # cleanup | 198 # cleanup |
| 199 checkVkResult vkDeviceWaitIdle(vulkan.device) | 199 checkVkResult vkDeviceWaitIdle(vulkan.device) |
| 200 DestroyPipeline(pipeline) | 200 DestroyPipeline(pipeline) |
