You've already forked flecs_tests
40 lines
1020 B
WebGPU Shading Language
40 lines
1020 B
WebGPU Shading Language
struct Sprite {
|
|
matrix: mat4x4f,
|
|
};
|
|
struct VsUniform {
|
|
mvp: mat4x4f,
|
|
};
|
|
struct VsI { //Vertex shader input
|
|
@builtin(instance_index) instance: u32,
|
|
@location(0) position: vec2f,
|
|
@location(1) uv: vec2f,
|
|
};
|
|
struct Vs2Fs { //Vertex shader to Fragment shader
|
|
@builtin(position) pos: vec4f,
|
|
@location(0) @interpolate(linear) uv: vec2f,
|
|
};
|
|
struct FsO { //Fragment shader output
|
|
@location(0) color: vec4f,
|
|
};
|
|
|
|
@binding(0) @group(0) var<uniform> vs_uniforms: VsUniform;
|
|
@binding(0) @group(1) var tex: texture_2d<f32>;
|
|
@binding(1) @group(1) var samp: sampler;
|
|
@binding(2) @group(1) var<storage> sprites: array<Sprite>;
|
|
|
|
@vertex fn vs_main(input: VsI) -> Vs2Fs {
|
|
var output: Vs2Fs;
|
|
|
|
output.pos = vec4f(input.position.x, input.position.y, 0, 0) * sprites[input.instance].matrix * vs_uniforms.mvp;
|
|
output.uv = input.uv;
|
|
|
|
return output;
|
|
}
|
|
|
|
@fragment fn fs_main(input: Vs2Fs) -> FsO {
|
|
var output: FsO;
|
|
|
|
output.color = textureSample(tex, samp, input.uv);
|
|
|
|
return output;
|
|
} |