30 lines
648 B
WebGPU Shading Language
30 lines
648 B
WebGPU Shading Language
struct Material {
|
|
color_a: vec4<f32>,
|
|
color_b: vec4<f32>,
|
|
border_color: vec4<f32>,
|
|
time: f32,
|
|
speed: f32,
|
|
border_size: f32,
|
|
};
|
|
|
|
@group(2) @binding(0)
|
|
var<uniform> mat: Material;
|
|
|
|
@fragment
|
|
fn fragment(in: VertexOutput) -> @location(0) vec4<f32> {
|
|
let uv = in.uv;
|
|
|
|
// animate
|
|
let x = uv.x + params.time * params.speed;
|
|
let g = fract(x);
|
|
|
|
let fill = mix(params.color_a, params.color_b, g);
|
|
|
|
// borders
|
|
let top = step(uv.y, params.border_size);
|
|
let bottom = step(1.0 - params.border_size, uv.y);
|
|
let border_mask = max(top, bottom);
|
|
|
|
return mix(fill, params.border_color, border_mask);
|
|
}
|