struct VertexInput { @location(0) position: vec3, @location(1) tex_coord: vec2, @location(2) atlas_position: vec2, @location(3) size: vec2, @location(4) target_position: vec2, @location(5) y_offset: f32, @builtin(instance_index) glyph_id: u32, } struct VertexOutput { @builtin(position) position: vec4, @location(0) tex_coord: vec2, } // struct Params { // screen_size: vec4, // } fn to_device_position(position: vec2, size: vec2) -> vec4 { return vec4((((position / size) * 2.) - 1.), 1., 1.); } @group(0) @binding(0) var screen_size: vec4; @vertex fn vs_main(input: VertexInput) -> VertexOutput { var out: VertexOutput; var vertex_pos = to_device_position(((input.position.xy + 1.) / 2.) * (input.size/2.0) + input.target_position + vec2(0., (input.y_offset/2.0)+32), screen_size.xy); // vertex_pos.y = -vertex_pos.y; var atlas_position = (((input.position.xy + 1.) / 2.) * input.size + input.atlas_position) / vec2(1024); out.position = vertex_pos; out.tex_coord = atlas_position; return out; }