43 lines
1.1 KiB
Plaintext
43 lines
1.1 KiB
Plaintext
struct VertexInput {
|
|
@location(0) position: vec3<f32>,
|
|
@location(1) tex_coord: vec2<f32>,
|
|
|
|
@location(2) atlas_position: vec2<f32>,
|
|
@location(3) size: vec2<f32>,
|
|
@location(4) target_position: vec2<f32>,
|
|
@location(5) y_offset: f32,
|
|
|
|
@builtin(instance_index) glyph_id: u32,
|
|
}
|
|
|
|
struct VertexOutput {
|
|
@builtin(position) position: vec4<f32>,
|
|
@location(0) tex_coord: vec2<f32>,
|
|
}
|
|
|
|
struct Params {
|
|
screen_size: vec4<f32>,
|
|
}
|
|
|
|
fn to_device_position(position: vec2<f32>, size: vec2<f32>) -> vec4<f32> {
|
|
return vec4<f32>((((position / size) * 2.) - 1.), 1., 1.);
|
|
}
|
|
|
|
@group(0) @binding(0)
|
|
var<uniform> params: Params;
|
|
|
|
@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<f32>(0., (input.y_offset/2.0)+32), params.screen_size.xy);
|
|
vertex_pos.y = -vertex_pos.y;
|
|
var atlas_position = (((input.position.xy + 1.) / 2.) * input.size + input.atlas_position) / vec2<f32>(1024);
|
|
|
|
out.position = vertex_pos;
|
|
out.tex_coord = atlas_position;
|
|
|
|
return out;
|
|
}
|
|
|