| struct PointLight { |
| position : vec4<f32>, |
| } |
| |
| struct PointLights { |
| values : array<PointLight>, |
| } |
| |
| struct Uniforms { |
| worldView : mat4x4<f32>, |
| proj : mat4x4<f32>, |
| numPointLights : u32, |
| color_source : u32, |
| color : vec4<f32>, |
| } |
| |
| @binding(0) @group(0) var<uniform> uniforms : Uniforms; |
| |
| @binding(1) @group(0) var<storage, read> pointLights : PointLights; |
| |
| @binding(2) @group(0) var mySampler : sampler; |
| |
| @binding(3) @group(0) var myTexture : texture_2d<f32>; |
| |
| struct FragmentInput { |
| @builtin(position) |
| position : vec4<f32>, |
| @location(0) |
| view_position : vec4<f32>, |
| @location(1) |
| normal : vec4<f32>, |
| @location(2) |
| uv : vec2<f32>, |
| @location(3) |
| color : vec4<f32>, |
| } |
| |
| struct FragmentOutput { |
| @location(0) |
| color : vec4<f32>, |
| } |
| |
| fn getColor(fragment : FragmentInput) -> vec4<f32> { |
| var color : vec4<f32>; |
| if ((uniforms.color_source == 0u)) { |
| color = fragment.color; |
| } else if ((uniforms.color_source == 1u)) { |
| color = fragment.normal; |
| color.a = 1.0; |
| } else if ((uniforms.color_source == 2u)) { |
| color = uniforms.color; |
| } else if ((uniforms.color_source == 3u)) { |
| color = textureSample(myTexture, mySampler, fragment.uv); |
| } |
| return color; |
| } |
| |
| @fragment |
| fn main(fragment : FragmentInput) -> FragmentOutput { |
| var output : FragmentOutput; |
| output.color = vec4<f32>(1.0, 0.0, 0.0, 1.0); |
| _ = uniforms; |
| _ = mySampler; |
| _ = myTexture; |
| _ = &(pointLights); |
| return output; |
| } |