comparison tests/test_vulkan_wrapper.nim @ 420:91e018270832

fix: all tests (once more)
author Sam <sam@basx.dev>
date Mon, 29 Jan 2024 00:19:35 +0700
parents eaf084ba80e5
children 6406766a222d
comparison
equal deleted inserted replaced
419:18e5443e4f83 420:91e018270832
10 wrapModeS: VK_SAMPLER_ADDRESS_MODE_REPEAT, 10 wrapModeS: VK_SAMPLER_ADDRESS_MODE_REPEAT,
11 wrapModeT: VK_SAMPLER_ADDRESS_MODE_REPEAT, 11 wrapModeT: VK_SAMPLER_ADDRESS_MODE_REPEAT,
12 ) 12 )
13 (R, W) = ([255'u8, 0'u8, 0'u8, 255'u8], [255'u8, 255'u8, 255'u8, 255'u8]) 13 (R, W) = ([255'u8, 0'u8, 0'u8, 255'u8], [255'u8, 255'u8, 255'u8, 255'u8])
14 mat = SINGLE_TEXTURE_MATERIAL.initMaterialData( 14 mat = SINGLE_TEXTURE_MATERIAL.initMaterialData(
15 name="mat", 15 name = "mat",
16 attributes={ 16 attributes = {
17 "baseTexture": initDataList(@[Texture(image: Image(width: 5, height: 5, imagedata: @[ 17 "baseTexture": initDataList(@[Texture(isGrayscale: false, colorImage: Image[RGBAPixel](width: 5, height: 5, imagedata: @[
18 R, R, R, R, R, 18 R, R, R, R, R,
19 R, R, W, R, R, 19 R, R, W, R, R,
20 R, W, W, W, R, 20 R, W, W, W, R,
21 R, R, W, R, R, 21 R, R, W, R, R,
22 R, R, R, R, R, 22 R, R, R, R, R,
23 ]), sampler: sampler)]) 23 ]), sampler: sampler)])
24 }.toTable 24 }.toTable
25 ) 25 )
26 Mat2Type = MaterialType( 26 Mat2Type = MaterialType(
27 name: "single texture material 2", 27 name: "single texture material 2",
28 vertexAttributes: { 28 vertexAttributes: {
29 "position": Vec3F32, 29 "position": Vec3F32,
30 "uv": Vec2F32, 30 "uv": Vec2F32,
31 }.toTable, 31 }.toTable,
32 attributes: {"baseTexture": TextureType}.toTable 32 attributes: {"baseTexture": TextureType}.toTable
33 ) 33 )
34 mat2 = Mat2Type.initMaterialData( 34 mat2 = Mat2Type.initMaterialData(
35 name="mat2", 35 name = "mat2",
36 attributes={ 36 attributes = {
37 "baseTexture": initDataList(@[Texture(image: Image(width: 5, height: 5, imagedata: @[ 37 "baseTexture": initDataList(@[Texture(isGrayscale: false, colorImage: Image[RGBAPixel](width: 5, height: 5, imagedata: @[
38 R, W, R, W, R, 38 R, W, R, W, R,
39 W, R, W, R, W, 39 W, R, W, R, W,
40 R, W, R, W, R, 40 R, W, R, W, R,
41 W, R, W, R, W, 41 W, R, W, R, W,
42 R, W, R, W, R, 42 R, W, R, W, R,
43 ]), sampler: sampler)]) 43 ]), sampler: sampler)])
44 }.toTable 44 }.toTable
45 ) 45 )
46 mat3 = SINGLE_COLOR_MATERIAL.initMaterialData( 46 mat3 = SINGLE_COLOR_MATERIAL.initMaterialData(
47 name="mat3", 47 name = "mat3",
48 attributes={ 48 attributes = {
49 "color": initDataList(@[newVec4f(0, 1, 0, 1)]) 49 "color": initDataList(@[newVec4f(0, 1, 0, 1)])
50 }.toTable 50 }.toTable
51 ) 51 )
52 52
53 proc scene_different_mesh_types(): seq[Mesh] = 53 proc scene_different_mesh_types(): seq[Mesh] =
54 @[ 54 @[
55 newMesh( 55 newMesh(
56 positions=[newVec3f(0.0, -0.5), newVec3f(0.5, 0.5), newVec3f(-0.5, 0.5)], 56 positions = [newVec3f(0.0, -0.5), newVec3f(0.5, 0.5), newVec3f(-0.5, 0.5)],
57 uvs=[newVec2f(0.0, -0.5), newVec2f(0.5, 0.5), newVec2f(-0.5, 0.5)], 57 uvs = [newVec2f(0.0, -0.5), newVec2f(0.5, 0.5), newVec2f(-0.5, 0.5)],
58 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)], 58 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)],
59 material=mat, 59 material = mat,
60 transform=translate(-0.7, -0.5), 60 transform = translate(-0.7, -0.5),
61 ), 61 ),
62 newMesh( 62 newMesh(
63 positions=[newVec3f(0.0, -0.4), newVec3f(0.4, 0.4), newVec3f(-0.4, 0.5)], 63 positions = [newVec3f(0.0, -0.4), newVec3f(0.4, 0.4), newVec3f(-0.4, 0.5)],
64 uvs=[newVec2f(0.0, -0.4), newVec2f(0.4, 0.4), newVec2f(-0.4, 0.5)], 64 uvs = [newVec2f(0.0, -0.4), newVec2f(0.4, 0.4), newVec2f(-0.4, 0.5)],
65 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)], 65 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)],
66 material=mat, 66 material = mat,
67 transform=translate(0, -0.5), 67 transform = translate(0, -0.5),
68 ), 68 ),
69 newMesh( 69 newMesh(
70 positions=[newVec3f(0.0, 0.5), newVec3f(0.5, -0.5), newVec3f(-0.5, -0.5)], 70 positions = [newVec3f(0.0, 0.5), newVec3f(0.5, -0.5), newVec3f(-0.5, -0.5)],
71 uvs=[newVec2f(0.0, 0.5), newVec2f(0.5, -0.5), newVec2f(-0.5, -0.5)], 71 uvs = [newVec2f(0.0, 0.5), newVec2f(0.5, -0.5), newVec2f(-0.5, -0.5)],
72 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)], 72 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)],
73 indices=[[0'u16, 2'u16, 1'u16]], 73 indices = [[0'u16, 2'u16, 1'u16]],
74 material=mat2, 74 material = mat2,
75 transform=translate(0.7, -0.5), 75 transform = translate(0.7, -0.5),
76 ), 76 ),
77 newMesh( 77 newMesh(
78 positions=[newVec3f(0.0, 0.4), newVec3f(0.4, -0.4), newVec3f(-0.4, -0.4)], 78 positions = [newVec3f(0.0, 0.4), newVec3f(0.4, -0.4), newVec3f(-0.4, -0.4)],
79 uvs=[newVec2f(0.0, 0.4), newVec2f(0.4, -0.4), newVec2f(-0.4, -0.4)], 79 uvs = [newVec2f(0.0, 0.4), newVec2f(0.4, -0.4), newVec2f(-0.4, -0.4)],
80 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 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)],
81 indices=[[0'u16, 2'u16, 1'u16]], 81 indices = [[0'u16, 2'u16, 1'u16]],
82 material=mat2, 82 material = mat2,
83 transform=translate(-0.7, 0.5), 83 transform = translate(-0.7, 0.5),
84 ), 84 ),
85 newMesh( 85 newMesh(
86 positions=[newVec3f(0.4, 0.5), newVec3f(0.9, -0.3), newVec3f(0.0, -0.3)], 86 positions = [newVec3f(0.4, 0.5), newVec3f(0.9, -0.3), newVec3f(0.0, -0.3)],
87 uvs=[newVec2f(0.4, 0.5), newVec2f(0.9, -0.3), newVec2f(0.0, -0.3)], 87 uvs = [newVec2f(0.4, 0.5), newVec2f(0.9, -0.3), newVec2f(0.0, -0.3)],
88 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)], 88 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)],
89 indices=[[0'u32, 2'u32, 1'u32]], 89 indices = [[0'u32, 2'u32, 1'u32]],
90 autoResize=false, 90 autoResize = false,
91 material=mat2, 91 material = mat2,
92 transform=translate(0, 0.5), 92 transform = translate(0, 0.5),
93 ), 93 ),
94 newMesh( 94 newMesh(
95 positions=[newVec3f(0.4, 0.5), newVec3f(0.9, -0.3), newVec3f(0.0, -0.3)], 95 positions = [newVec3f(0.4, 0.5), newVec3f(0.9, -0.3), newVec3f(0.0, -0.3)],
96 uvs=[newVec2f(0.4, 0.5), newVec2f(0.9, -0.3), newVec2f(0.0, -0.3)], 96 uvs = [newVec2f(0.4, 0.5), newVec2f(0.9, -0.3), newVec2f(0.0, -0.3)],
97 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)], 97 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)],
98 indices=[[0'u32, 2'u32, 1'u32]], 98 indices = [[0'u32, 2'u32, 1'u32]],
99 autoResize=false, 99 autoResize = false,
100 material=mat2, 100 material = mat2,
101 transform=translate(0.7, 0.5), 101 transform = translate(0.7, 0.5),
102 ), 102 ),
103 ] 103 ]
104 104
105 proc scene_simple(): seq[Mesh] = 105 proc scene_simple(): seq[Mesh] =
106 @[ 106 @[
107 newMesh( 107 newMesh(
108 positions=[newVec3f(0.0, -0.3), newVec3f(0.3, 0.3), newVec3f(-0.3, 0.3)], 108 positions = [newVec3f(0.0, -0.3), newVec3f(0.3, 0.3), newVec3f(-0.3, 0.3)],
109 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)], 109 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)],
110 uvs=[newVec2f(0.0, -0.3), newVec2f(0.3, 0.3), newVec2f(-0.3, 0.3)], 110 uvs = [newVec2f(0.0, -0.3), newVec2f(0.3, 0.3), newVec2f(-0.3, 0.3)],
111 material=mat, 111 material = mat,
112 transform=translate(0.4, 0.4), 112 transform = translate(0.4, 0.4),
113 ), 113 ),
114 newMesh( 114 newMesh(
115 positions=[newVec3f(0.0, -0.5), newVec3f(0.5, 0.5), newVec3f(-0.5, 0.5)], 115 positions = [newVec3f(0.0, -0.5), newVec3f(0.5, 0.5), newVec3f(-0.5, 0.5)],
116 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)], 116 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)],
117 uvs=[newVec2f(0.0, -0.5), newVec2f(0.5, 0.5), newVec2f(-0.5, 0.5)], 117 uvs = [newVec2f(0.0, -0.5), newVec2f(0.5, 0.5), newVec2f(-0.5, 0.5)],
118 material=mat, 118 material = mat,
119 transform=translate(0.4, -0.4), 119 transform = translate(0.4, -0.4),
120 ), 120 ),
121 newMesh( 121 newMesh(
122 positions=[newVec3f(0.0, -0.6), newVec3f(0.6, 0.6), newVec3f(-0.6, 0.6)], 122 positions = [newVec3f(0.0, -0.6), newVec3f(0.6, 0.6), newVec3f(-0.6, 0.6)],
123 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)], 123 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)],
124 uvs=[newVec2f(0.0, -0.6), newVec2f(0.6, 0.6), newVec2f(-0.6, 0.6)], 124 uvs = [newVec2f(0.0, -0.6), newVec2f(0.6, 0.6), newVec2f(-0.6, 0.6)],
125 indices=[[0'u32, 1'u32, 2'u32]], 125 indices = [[0'u32, 1'u32, 2'u32]],
126 autoResize=false, 126 autoResize = false,
127 material=mat, 127 material = mat,
128 transform=translate(-0.4, 0.4), 128 transform = translate(-0.4, 0.4),
129 ), 129 ),
130 newMesh( 130 newMesh(
131 positions=[newVec3f(0.0, -0.8), newVec3f(0.8, 0.8), newVec3f(-0.8, 0.8)], 131 positions = [newVec3f(0.0, -0.8), newVec3f(0.8, 0.8), newVec3f(-0.8, 0.8)],
132 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)], 132 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)],
133 uvs=[newVec2f(0.0, -0.8), newVec2f(0.8, 0.8), newVec2f(-0.8, 0.8)], 133 uvs = [newVec2f(0.0, -0.8), newVec2f(0.8, 0.8), newVec2f(-0.8, 0.8)],
134 indices=[[0'u16, 1'u16, 2'u16]], 134 indices = [[0'u16, 1'u16, 2'u16]],
135 instanceTransforms=[Unit4F32, Unit4F32], 135 instanceTransforms = [Unit4F32, Unit4F32],
136 material=mat, 136 material = mat,
137 transform=translate(-0.4, -0.4), 137 transform = translate(-0.4, -0.4),
138 ) 138 )
139 ] 139 ]
140 140
141 proc scene_primitives(): seq[Mesh] = 141 proc scene_primitives(): seq[Mesh] =
142 var r = rect(color="ff0000") 142 var r = rect(color = "ff0000")
143 var t = tri(color="0000ff") 143 var t = tri(color = "0000ff")
144 var c = circle(color="00ff00") 144 var c = circle(color = "00ff00")
145 r.material = mat 145 r.material = mat
146 t.material = mat 146 t.material = mat
147 c.material = mat 147 c.material = mat
148 r.transform = translate(newVec3f(0.5, -0.3)) 148 r.transform = translate(newVec3f(0.5, -0.3))
149 t.transform = translate(newVec3f(0.3, 0.3)) 149 t.transform = translate(newVec3f(0.3, 0.3))
150 c.transform = translate(newVec3f(-0.3, 0.1)) 150 c.transform = translate(newVec3f(-0.3, 0.1))
151 result = @[r, c, t] 151 result = @[r, c, t]
152 152
153 proc scene_flag(): seq[Mesh] = 153 proc scene_flag(): seq[Mesh] =
154 @[ 154 @[
155 newMesh( 155 newMesh(
156 positions=[newVec3f(-1.0, -1.0), newVec3f(1.0, -1.0), newVec3f(1.0, 1.0), newVec3f(-1.0, 1.0)], 156 positions = [newVec3f(-1.0, -1.0), newVec3f(1.0, -1.0), newVec3f(1.0, 1.0), newVec3f(-1.0, 1.0)],
157 uvs=[newVec2f(-1.0, -1.0), newVec2f(1.0, -1.0), newVec2f(1.0, 1.0), newVec2f(-1.0, 1.0)], 157 uvs = [newVec2f(-1.0, -1.0), newVec2f(1.0, -1.0), newVec2f(1.0, 1.0), newVec2f(-1.0, 1.0)],
158 colors=[newVec4f(-1, -1, 1, 1), newVec4f(1, -1, 1, 1), newVec4f(1, 1, 1, 1), newVec4f(-1, 1, 1, 1)], 158 colors = [newVec4f(-1, -1, 1, 1), newVec4f(1, -1, 1, 1), newVec4f(1, 1, 1, 1), newVec4f(-1, 1, 1, 1)],
159 indices=[[0'u16, 1'u16, 2'u16], [2'u16, 3'u16, 0'u16]], 159 indices = [[0'u16, 1'u16, 2'u16], [2'u16, 3'u16, 0'u16]],
160 material=mat, 160 material = mat,
161 transform=scale(0.5, 0.5) 161 transform = scale(0.5, 0.5)
162 ) 162 )
163 ] 163 ]
164 164
165 proc scene_multi_material(): seq[Mesh] = 165 proc scene_multi_material(): seq[Mesh] =
166 var 166 var
167 r1 = rect(color="ffffff") 167 r1 = rect(color = "ffffff")
168 r2 = rect(color="000000") 168 r2 = rect(color = "000000")
169 r1.material = mat 169 r1.material = mat
170 r2.material = mat3 170 r2.material = mat3
171 r1.transform = translate(newVec3f(-0.5)) 171 r1.transform = translate(newVec3f(-0.5))
172 r2.transform = translate(newVec3f(+0.5)) 172 r2.transform = translate(newVec3f(+0.5))
173 result = @[r1, r2] 173 result = @[r1, r2]
176 var engine = initEngine("Test") 176 var engine = initEngine("Test")
177 177
178 # INIT RENDERER: 178 # INIT RENDERER:
179 const 179 const
180 shaderConfiguration1 = createShaderConfiguration( 180 shaderConfiguration1 = createShaderConfiguration(
181 inputs=[ 181 inputs = [
182 attr[Vec3f]("position", memoryPerformanceHint=PreferFastRead), 182 attr[Vec3f]("position", memoryPerformanceHint = PreferFastRead),
183 attr[Vec4f]("color", memoryPerformanceHint=PreferFastWrite), 183 attr[Vec4f]("color", memoryPerformanceHint = PreferFastWrite),
184 attr[Mat4]("transform", perInstance=true), 184 attr[Mat4]("transform", perInstance = true),
185 ], 185 ],
186 intermediates=[ 186 intermediates = [
187 attr[Vec4f]("outcolor"), 187 attr[Vec4f]("outcolor"),
188 ], 188 ],
189 outputs=[attr[Vec4f]("color")], 189 outputs = [attr[Vec4f]("color")],
190 samplers=[ 190 samplers = [
191 attr[Texture]("baseTexture") 191 attr[Texture]("baseTexture")
192 ], 192 ],
193 vertexCode="""gl_Position = vec4(position, 1.0) * transform; outcolor = color;""", 193 vertexCode = """gl_Position = vec4(position, 1.0) * transform; outcolor = color;""",
194 fragmentCode="color = texture(baseTexture, outcolor.xy) * 0.5 + outcolor * 0.5;", 194 fragmentCode = "color = texture(baseTexture, outcolor.xy) * 0.5 + outcolor * 0.5;",
195 ) 195 )
196 shaderConfiguration2 = createShaderConfiguration( 196 shaderConfiguration2 = createShaderConfiguration(
197 inputs=[ 197 inputs = [
198 attr[Vec3f]("position", memoryPerformanceHint=PreferFastRead), 198 attr[Vec3f]("position", memoryPerformanceHint = PreferFastRead),
199 attr[Mat4]("transform", perInstance=true), 199 attr[Mat4]("transform", perInstance = true),
200 ], 200 ],
201 intermediates=[attr[Vec4f]("outcolor")], 201 intermediates = [attr[Vec4f]("outcolor")],
202 outputs=[attr[Vec4f]("color")], 202 outputs = [attr[Vec4f]("color")],
203 uniforms=[attr[Vec4f]("color", arrayCount=1)], 203 uniforms = [attr[Vec4f]("color", arrayCount = 1)],
204 vertexCode="""gl_Position = vec4(position, 1.0) * transform; outcolor = Uniforms.color[0];""", 204 vertexCode = """gl_Position = vec4(position, 1.0) * transform; outcolor = Uniforms.color[0];""",
205 fragmentCode="color = outcolor;", 205 fragmentCode = "color = outcolor;",
206 ) 206 )
207 engine.initRenderer({ 207 engine.initRenderer({
208 SINGLE_TEXTURE_MATERIAL: shaderConfiguration1, 208 SINGLE_TEXTURE_MATERIAL: shaderConfiguration1,
209 SINGLE_TEXTURE_MATERIAL: shaderConfiguration1, 209 SINGLE_TEXTURE_MATERIAL: shaderConfiguration1,
210 Mat2Type: shaderConfiguration1, 210 Mat2Type: shaderConfiguration1,