Another project
1struct Frame {
2 clip_from_world: mat4x4<f32>,
3 text_color: vec4<f32>,
4 pixels_per_mm: f32,
5 _pad0: f32,
6 _pad1: f32,
7 _pad2: f32,
8};
9
10struct Vertex {
11 @location(0) anchor_mm: vec2<f32>,
12 @location(1) offset_px: vec2<f32>,
13 @location(2) pick_id: u32,
14};
15
16struct VsOut {
17 @builtin(position) clip: vec4<f32>,
18 @location(0) @interpolate(flat) pick_id: u32,
19};
20
21struct FsOut {
22 @location(0) color: vec4<f32>,
23 @location(1) pick_id: u32,
24};
25
26@group(0) @binding(0) var<uniform> u: Frame;
27
28@vertex
29fn vs(in: Vertex) -> VsOut {
30 let pos_mm = in.anchor_mm + in.offset_px / u.pixels_per_mm;
31 let clip = u.clip_from_world * vec4<f32>(pos_mm, 0.0, 1.0);
32 var out: VsOut;
33 out.clip = clip;
34 out.pick_id = in.pick_id;
35 return out;
36}
37
38@fragment
39fn fs(in: VsOut) -> FsOut {
40 let c = u.text_color;
41 var out: FsOut;
42 out.color = vec4<f32>(c.rgb * c.a, c.a);
43 out.pick_id = in.pick_id;
44 return out;
45}