an_editor/shaders/vertex.wgsl

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;
}