You've already forked flecs_tests
Add copy/paste, rewrite rendering pipeline with instanced draw calls and add a lot of caching to minimize overhead on huge edits.
This commit is contained in:
44
src/shaders/overlay.wgsl
Normal file
44
src/shaders/overlay.wgsl
Normal file
@@ -0,0 +1,44 @@
|
||||
struct VsUniform {
|
||||
mvp: mat4x4f,
|
||||
};
|
||||
|
||||
struct ShapeUniform {
|
||||
transform: mat4x4f,
|
||||
state: u32,
|
||||
};
|
||||
|
||||
struct VsIn {
|
||||
@location(0) position: vec2f,
|
||||
};
|
||||
|
||||
struct Vs2Fs {
|
||||
@builtin(position) pos: vec4f,
|
||||
@location(0) @interpolate(linear) color: vec4f,
|
||||
};
|
||||
|
||||
struct FsOut {
|
||||
@location(0) color: vec4f,
|
||||
};
|
||||
|
||||
@binding(0) @group(0) var<uniform> vs_uniforms: VsUniform;
|
||||
@binding(1) @group(0) var<uniform> shape_uniform: ShapeUniform;
|
||||
|
||||
@vertex fn vs_main(input: VsIn) -> Vs2Fs {
|
||||
var output: Vs2Fs;
|
||||
let world_pos = shape_uniform.transform * vec4f(input.position.x, input.position.y, 0.0, 1.0);
|
||||
output.pos = vs_uniforms.mvp * world_pos;
|
||||
if (shape_uniform.state == 2u) {
|
||||
output.color = vec4f(1.0, 0.84, 0.0, 1.0);
|
||||
} else if (shape_uniform.state == 1u) {
|
||||
output.color = vec4f(0.5, 0.6, 1.0, 1.0);
|
||||
} else {
|
||||
output.color = vec4f(0.8, 0.8, 0.8, 1.0);
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
@fragment fn fs_main(input: Vs2Fs) -> FsOut {
|
||||
var output: FsOut;
|
||||
output.color = input.color;
|
||||
return output;
|
||||
}
|
||||
@@ -1,13 +1,20 @@
|
||||
struct VsUniform {
|
||||
mvp: mat4x4f,
|
||||
instance_base: u32,
|
||||
};
|
||||
|
||||
struct ShapeUniform {
|
||||
struct ShapeData {
|
||||
transform: mat4x4f,
|
||||
state: u32,
|
||||
};
|
||||
|
||||
@binding(0) @group(0) var<uniform> vs_uniforms: VsUniform;
|
||||
|
||||
@binding(0) @group(1) var<storage> shape_data: array<ShapeData>;
|
||||
@binding(1) @group(1) var<storage> instance_map: array<u32>;
|
||||
|
||||
struct VsIn {
|
||||
@builtin(instance_index) instance_idx: u32,
|
||||
@location(0) position: vec2f,
|
||||
};
|
||||
|
||||
@@ -20,16 +27,15 @@ struct FsOut {
|
||||
@location(0) color: vec4f,
|
||||
};
|
||||
|
||||
@binding(0) @group(0) var<uniform> vs_uniforms: VsUniform;
|
||||
@binding(1) @group(0) var<uniform> shape_uniform: ShapeUniform;
|
||||
|
||||
@vertex fn vs_main(input: VsIn) -> Vs2Fs {
|
||||
var output: Vs2Fs;
|
||||
let world_pos = shape_uniform.transform * vec4f(input.position.x, input.position.y, 0.0, 1.0);
|
||||
let shape_idx = instance_map[vs_uniforms.instance_base + input.instance_idx];
|
||||
let shape = shape_data[shape_idx];
|
||||
let world_pos = shape.transform * vec4f(input.position.x, input.position.y, 0.0, 1.0);
|
||||
output.pos = vs_uniforms.mvp * world_pos;
|
||||
if (shape_uniform.state == 2u) {
|
||||
if (shape.state == 2u) {
|
||||
output.color = vec4f(1.0, 0.84, 0.0, 1.0);
|
||||
} else if (shape_uniform.state == 1u) {
|
||||
} else if (shape.state == 1u) {
|
||||
output.color = vec4f(0.5, 0.6, 1.0, 1.0);
|
||||
} else {
|
||||
output.color = vec4f(0.8, 0.8, 0.8, 1.0);
|
||||
|
||||
Reference in New Issue
Block a user