struct PointLight { position : vec4; }; [[block]] struct PointLights { values : [[stride(16)]] array; }; [[block]] struct Uniforms { worldView : mat4x4; proj : mat4x4; numPointLights : u32; color_source : u32; color : vec4; }; [[binding(0), group(0)]] var uniforms : Uniforms; [[binding(1), group(0)]] var pointLights : PointLights; [[binding(2), group(0)]] var mySampler: sampler; [[binding(3), group(0)]] var myTexture: texture_2d; struct FragmentInput { [[builtin(position)]] position : vec4; [[location(0)]] view_position : vec4; [[location(1)]] normal : vec4; [[location(2)]] uv : vec2; [[location(3)]] color : vec4; }; struct FragmentOutput { [[location(0)]] color : vec4; }; fn getColor(fragment : FragmentInput) -> vec4{ var color : vec4; if(uniforms.color_source == 0u){ // VERTEX COLOR color = fragment.color; }elseif(uniforms.color_source == 1u){ // NORMALS // color = vec4(0.0, 0.0, 1.0, 1.0); color = fragment.normal; color.a = 1.0; }elseif(uniforms.color_source == 2u){ // uniform color color = uniforms.color; }elseif(uniforms.color_source == 3u){ // TEXTURE color = textureSample(myTexture, mySampler, fragment.uv); } return color; }; [[stage(fragment)]] fn main(fragment : FragmentInput) -> FragmentOutput { var output : FragmentOutput; output.color = vec4(1.0, 0.0, 0.0, 1.0); _ = uniforms; _ = mySampler; _ = myTexture; _ = &pointLights; // output.color.x = output.color.x + pointLights.values[0].position.x; return output; }