Mercurial > games > semicongine
comparison tests/test_vulkan_wrapper.nim @ 211:744285b47a4d
did: refactor image handling
| author | Sam <sam@basx.dev> | 
|---|---|
| date | Tue, 09 May 2023 19:52:57 +0700 | 
| parents | 659992f14dd6 | 
| children | 3cbbf50e9e4c | 
   comparison
  equal
  deleted
  inserted
  replaced
| 210:f3912838cd69 | 211:744285b47a4d | 
|---|---|
| 35 | 35 | 
| 36 proc scene_different_mesh_types(): Entity = | 36 proc scene_different_mesh_types(): Entity = | 
| 37 result = newEntity("root", | 37 result = newEntity("root", | 
| 38 newEntity("triangle1", newMesh( | 38 newEntity("triangle1", newMesh( | 
| 39 positions=[newVec3f(0.0, -0.5), newVec3f(0.5, 0.5), newVec3f(-0.5, 0.5)], | 39 positions=[newVec3f(0.0, -0.5), newVec3f(0.5, 0.5), newVec3f(-0.5, 0.5)], | 
| 40 colors=[newVec3f(1.0, 0.0, 0.0), newVec3f(0.0, 1.0, 0.0), newVec3f(0.0, 0.0, 1.0)], | 40 colors=[newVec4f(1.0, 0.0, 0.0, 1), newVec4f(0.0, 1.0, 0.0, 1), newVec4f(0.0, 0.0, 1.0, 1)], | 
| 41 )), | 41 )), | 
| 42 newEntity("triangle1b", newMesh( | 42 newEntity("triangle1b", newMesh( | 
| 43 positions=[newVec3f(0.0, -0.4), newVec3f(0.4, 0.4), newVec3f(-0.4, 0.5)], | 43 positions=[newVec3f(0.0, -0.4), newVec3f(0.4, 0.4), newVec3f(-0.4, 0.5)], | 
| 44 colors=[newVec3f(1.0, 0.0, 0.0), newVec3f(0.0, 1.0, 0.0), newVec3f(0.0, 0.0, 1.0)], | 44 colors=[newVec4f(1.0, 0.0, 0.0, 1), newVec4f(0.0, 1.0, 0.0, 1), newVec4f(0.0, 0.0, 1.0, 1)], | 
| 45 )), | 45 )), | 
| 46 newEntity("triangle2a", newMesh( | 46 newEntity("triangle2a", newMesh( | 
| 47 positions=[newVec3f(0.0, 0.5), newVec3f(0.5, -0.5), newVec3f(-0.5, -0.5)], | 47 positions=[newVec3f(0.0, 0.5), newVec3f(0.5, -0.5), newVec3f(-0.5, -0.5)], | 
| 48 colors=[newVec3f(1.0, 0.0, 0.0), newVec3f(0.0, 1.0, 0.0), newVec3f(0.0, 0.0, 1.0)], | 48 colors=[newVec4f(1.0, 0.0, 0.0, 1), newVec4f(0.0, 1.0, 0.0, 1), newVec4f(0.0, 0.0, 1.0, 1)], | 
| 49 indices=[[0'u16, 2'u16, 1'u16]] | 49 indices=[[0'u16, 2'u16, 1'u16]] | 
| 50 )), | 50 )), | 
| 51 newEntity("triangle2b", newMesh( | 51 newEntity("triangle2b", newMesh( | 
| 52 positions=[newVec3f(0.0, 0.4), newVec3f(0.4, -0.4), newVec3f(-0.4, -0.4)], | 52 positions=[newVec3f(0.0, 0.4), newVec3f(0.4, -0.4), newVec3f(-0.4, -0.4)], | 
| 53 colors=[newVec3f(1.0, 0.0, 0.0), newVec3f(0.0, 1.0, 0.0), newVec3f(0.0, 0.0, 1.0)], | 53 colors=[newVec4f(1.0, 0.0, 0.0, 1), newVec4f(0.0, 1.0, 0.0, 1), newVec4f(0.0, 0.0, 1.0, 1)], | 
| 54 indices=[[0'u16, 2'u16, 1'u16]] | 54 indices=[[0'u16, 2'u16, 1'u16]] | 
| 55 )), | 55 )), | 
| 56 newEntity("triangle3a", newMesh( | 56 newEntity("triangle3a", newMesh( | 
| 57 positions=[newVec3f(0.4, 0.5), newVec3f(0.9, -0.3), newVec3f(0.0, -0.3)], | 57 positions=[newVec3f(0.4, 0.5), newVec3f(0.9, -0.3), newVec3f(0.0, -0.3)], | 
| 58 colors=[newVec3f(1.0, 1.0, 0.0), newVec3f(1.0, 1.0, 0.0), newVec3f(1.0, 1.0, 0.0)], | 58 colors=[newVec4f(1.0, 1.0, 0.0, 1), newVec4f(1.0, 1.0, 0.0, 1), newVec4f(1.0, 1.0, 0.0, 1)], | 
| 59 indices=[[0'u32, 2'u32, 1'u32]], | 59 indices=[[0'u32, 2'u32, 1'u32]], | 
| 60 autoResize=false | 60 autoResize=false | 
| 61 )), | 61 )), | 
| 62 newEntity("triangle3b", newMesh( | 62 newEntity("triangle3b", newMesh( | 
| 63 positions=[newVec3f(0.4, 0.5), newVec3f(0.9, -0.3), newVec3f(0.0, -0.3)], | 63 positions=[newVec3f(0.4, 0.5), newVec3f(0.9, -0.3), newVec3f(0.0, -0.3)], | 
| 64 colors=[newVec3f(1.0, 1.0, 0.0), newVec3f(1.0, 1.0, 0.0), newVec3f(1.0, 1.0, 0.0)], | 64 colors=[newVec4f(1.0, 1.0, 0.0, 1), newVec4f(1.0, 1.0, 0.0, 1), newVec4f(1.0, 1.0, 0.0, 1)], | 
| 65 indices=[[0'u32, 2'u32, 1'u32]], | 65 indices=[[0'u32, 2'u32, 1'u32]], | 
| 66 autoResize=false | 66 autoResize=false | 
| 67 )), | 67 )), | 
| 68 ) | 68 ) | 
| 69 for mesh in allComponentsOfType[Mesh](result): | 69 for mesh in allComponentsOfType[Mesh](result): | 
| 70 mesh.setInstanceData("translate", @[newVec3f()]) | 70 mesh.setInstanceData("translate", @[newVec3f()]) | 
| 71 | 71 | 
| 72 proc scene_simple(): Entity = | 72 proc scene_simple(): Entity = | 
| 73 var mymesh1 = newMesh( | 73 var mymesh1 = newMesh( | 
| 74 positions=[newVec3f(0.0, -0.3), newVec3f(0.3, 0.3), newVec3f(-0.3, 0.3)], | 74 positions=[newVec3f(0.0, -0.3), newVec3f(0.3, 0.3), newVec3f(-0.3, 0.3)], | 
| 75 colors=[newVec3f(1.0, 0.0, 0.0), newVec3f(0.0, 1.0, 0.0), newVec3f(0.0, 0.0, 1.0)], | 75 colors=[newVec4f(1.0, 0.0, 0.0, 1), newVec4f(0.0, 1.0, 0.0, 1), newVec4f(0.0, 0.0, 1.0, 1)], | 
| 76 ) | 76 ) | 
| 77 var mymesh2 = newMesh( | 77 var mymesh2 = newMesh( | 
| 78 positions=[newVec3f(0.0, -0.5), newVec3f(0.5, 0.5), newVec3f(-0.5, 0.5)], | 78 positions=[newVec3f(0.0, -0.5), newVec3f(0.5, 0.5), newVec3f(-0.5, 0.5)], | 
| 79 colors=[newVec3f(1.0, 0.0, 0.0), newVec3f(0.0, 1.0, 0.0), newVec3f(0.0, 0.0, 1.0)], | 79 colors=[newVec4f(1.0, 0.0, 0.0, 1), newVec4f(0.0, 1.0, 0.0, 1), newVec4f(0.0, 0.0, 1.0, 1)], | 
| 80 ) | 80 ) | 
| 81 var mymesh3 = newMesh( | 81 var mymesh3 = newMesh( | 
| 82 positions=[newVec3f(0.0, -0.6), newVec3f(0.6, 0.6), newVec3f(-0.6, 0.6)], | 82 positions=[newVec3f(0.0, -0.6), newVec3f(0.6, 0.6), newVec3f(-0.6, 0.6)], | 
| 83 colors=[newVec3f(1.0, 1.0, 0.0), newVec3f(1.0, 1.0, 0.0), newVec3f(1.0, 1.0, 0.0)], | 83 colors=[newVec4f(1.0, 1.0, 0.0, 1), newVec4f(1.0, 1.0, 0.0, 1), newVec4f(1.0, 1.0, 0.0, 1)], | 
| 84 indices=[[0'u32, 1'u32, 2'u32]], | 84 indices=[[0'u32, 1'u32, 2'u32]], | 
| 85 autoResize=false | 85 autoResize=false | 
| 86 ) | 86 ) | 
| 87 var mymesh4 = newMesh( | 87 var mymesh4 = newMesh( | 
| 88 positions=[newVec3f(0.0, -0.8), newVec3f(0.8, 0.8), newVec3f(-0.8, 0.8)], | 88 positions=[newVec3f(0.0, -0.8), newVec3f(0.8, 0.8), newVec3f(-0.8, 0.8)], | 
| 89 colors=[newVec3f(0.0, 0.0, 1.0), newVec3f(0.0, 0.0, 1.0), newVec3f(0.0, 0.0, 1.0)], | 89 colors=[newVec4f(0.0, 0.0, 1.0, 1), newVec4f(0.0, 0.0, 1.0, 1), newVec4f(0.0, 0.0, 1.0, 1)], | 
| 90 indices=[[0'u16, 1'u16, 2'u16]], | 90 indices=[[0'u16, 1'u16, 2'u16]], | 
| 91 instanceCount=2 | 91 instanceCount=2 | 
| 92 ) | 92 ) | 
| 93 mymesh1.setInstanceData("translate", @[newVec3f(0.3, 0.0)]) | 93 mymesh1.setInstanceData("translate", @[newVec3f(0.3, 0.0)]) | 
| 94 mymesh2.setInstanceData("translate", @[newVec3f(0.0, 0.3)]) | 94 mymesh2.setInstanceData("translate", @[newVec3f(0.0, 0.3)]) | 
| 105 c.setInstanceData("translate", @[newVec3f(-0.3, 0.1)]) | 105 c.setInstanceData("translate", @[newVec3f(-0.3, 0.1)]) | 
| 106 result = newEntity("root", t, r, c) | 106 result = newEntity("root", t, r, c) | 
| 107 | 107 | 
| 108 proc scene_flag(): Entity = | 108 proc scene_flag(): Entity = | 
| 109 var r = rect(color="ff0000") | 109 var r = rect(color="ff0000") | 
| 110 r.updateMeshData("color", @[newVec3f(0, 0), newVec3f(1, 0), newVec3f(1, 1), newVec3f(0, 1)]) | 110 r.updateMeshData("color", @[newVec4f(0, 0), newVec4f(1, 0), newVec4f(1, 1), newVec4f(0, 1)]) | 
| 111 result = newEntity("root", r) | 111 result = newEntity("root", r) | 
| 112 | 112 | 
| 113 proc main() = | 113 proc main() = | 
| 114 var engine = initEngine("Test") | 114 var engine = initEngine("Test") | 
| 115 | 115 | 
| 116 # INIT RENDERER: | 116 # INIT RENDERER: | 
| 117 const | 117 const | 
| 118 vertexInput = @[ | 118 vertexInput = @[ | 
| 119 attr[Vec3f]("position", memoryPerformanceHint=PreferFastRead), | 119 attr[Vec3f]("position", memoryPerformanceHint=PreferFastRead), | 
| 120 attr[Vec3f]("color", memoryPerformanceHint=PreferFastWrite), | 120 attr[Vec4f]("color", memoryPerformanceHint=PreferFastWrite), | 
| 121 attr[Vec3f]("translate", perInstance=true) | 121 attr[Vec3f]("translate", perInstance=true) | 
| 122 ] | 122 ] | 
| 123 vertexOutput = @[attr[Vec3f]("outcolor")] | 123 vertexOutput = @[attr[Vec4f]("outcolor")] | 
| 124 uniforms = @[attr[float32]("time")] | 124 uniforms = @[attr[float32]("time")] | 
| 125 samplers = @[attr[Sampler2DType]("my_little_texture")] | 125 samplers = @[attr[Sampler2DType]("my_little_texture")] | 
| 126 fragOutput = @[attr[Vec4f]("color")] | 126 fragOutput = @[attr[Vec4f]("color")] | 
| 127 vertexCode = compileGlslShader( | 127 vertexCode = compileGlslShader( | 
| 128 stage=VK_SHADER_STAGE_VERTEX_BIT, | 128 stage=VK_SHADER_STAGE_VERTEX_BIT, | 
| 136 stage=VK_SHADER_STAGE_FRAGMENT_BIT, | 136 stage=VK_SHADER_STAGE_FRAGMENT_BIT, | 
| 137 inputs=vertexOutput, | 137 inputs=vertexOutput, | 
| 138 uniforms=uniforms, | 138 uniforms=uniforms, | 
| 139 samplers=samplers, | 139 samplers=samplers, | 
| 140 outputs=fragOutput, | 140 outputs=fragOutput, | 
| 141 main="color = texture(my_little_texture, outcolor.xy) * 0.5 + vec4(outcolor, 1) * 0.5;" | 141 main="color = texture(my_little_texture, outcolor.xy) * 0.5 + outcolor * 0.5;" | 
| 142 ) | 142 ) | 
| 143 var renderPass = engine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode) | 143 var renderPass = engine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode) | 
| 144 engine.setRenderer(renderPass) | 144 engine.setRenderer(renderPass) | 
| 145 | 145 | 
| 146 # INIT SCENES | 146 # INIT SCENES | 
| 151 newScene("flag", scene_flag()), | 151 newScene("flag", scene_flag()), | 
| 152 ] | 152 ] | 
| 153 for scene in scenes.mitems: | 153 for scene in scenes.mitems: | 
| 154 scene.addShaderGlobal("time", 0.0'f32) | 154 scene.addShaderGlobal("time", 0.0'f32) | 
| 155 let (R, W) = ([255'u8, 0'u8, 0'u8, 255'u8], [255'u8, 255'u8, 255'u8, 255'u8]) | 155 let (R, W) = ([255'u8, 0'u8, 0'u8, 255'u8], [255'u8, 255'u8, 255'u8, 255'u8]) | 
| 156 scene.addTexture("my_little_texture", TextureImage(width: 5, height: 5, imagedata: @[ | 156 scene.addTexture("my_little_texture", Image(width: 5, height: 5, imagedata: @[ | 
| 157 R, R, R, R, R, | 157 R, R, R, R, R, | 
| 158 R, R, W, R, R, | 158 R, R, W, R, R, | 
| 159 R, W, W, W, R, | 159 R, W, W, W, R, | 
| 160 R, R, W, R, R, | 160 R, R, W, R, R, | 
| 161 R, R, R, R, R, | 161 R, R, R, R, R, | 
| 162 ])) | 162 ]), VK_FILTER_NEAREST) | 
| 163 engine.addScene(scene, vertexInput) | 163 engine.addScene(scene, vertexInput) | 
| 164 | 164 | 
| 165 # MAINLOOP | 165 # MAINLOOP | 
| 166 echo "Setup successfull, start rendering" | 166 echo "Setup successfull, start rendering" | 
| 167 for i in 0 ..< 3: | 167 for i in 0 ..< 3: | 
