Skip to content

Commit

Permalink
Clean WGSL shader code using newer features
Browse files Browse the repository at this point in the history
It looks like this code has been written quite a while ago, presumably
when the capabilities of naga regarding WGSL were quite limited yet. I
changed some stuff to what I would perceive as more idiomatic. I removed
a bunch of type annotations, used built-in type aliases, and even used
abstract types new with wgpu 0.19.
  • Loading branch information
LukasKalbertodt committed Jan 20, 2024
1 parent 25a742a commit 4ac455a
Showing 1 changed file with 28 additions and 28 deletions.
56 changes: 28 additions & 28 deletions src/shader/glyph.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -8,62 +8,62 @@ struct Globals {

struct VertexInput {
@builtin(vertex_index) vertex_index: u32,
@location(0) left_top: vec3<f32>,
@location(1) right_bottom: vec2<f32>,
@location(2) tex_left_top: vec2<f32>,
@location(3) tex_right_bottom: vec2<f32>,
@location(4) color: vec4<f32>,
@location(0) left_top: vec3f,
@location(1) right_bottom: vec2f,
@location(2) tex_left_top: vec2f,
@location(3) tex_right_bottom: vec2f,
@location(4) color: vec4f,
}

struct VertexOutput {
@builtin(position) position: vec4<f32>,
@location(0) f_tex_pos: vec2<f32>,
@location(1) f_color: vec4<f32>,
@builtin(position) position: vec4f,
@location(0) f_tex_pos: vec2f,
@location(1) f_color: vec4f,
}

@vertex
fn vs_main(input: VertexInput) -> VertexOutput {
var out: VertexOutput;

var pos: vec2<f32> = vec2<f32>(0.0, 0.0);
var left: f32 = input.left_top.x;
var right: f32 = input.right_bottom.x;
var top: f32 = input.left_top.y;
var bottom: f32 = input.right_bottom.y;
var pos = vec2f(0, 0);
let left = input.left_top.x;
let right = input.right_bottom.x;
let top = input.left_top.y;
let bottom = input.right_bottom.y;

switch (i32(input.vertex_index)) {
case 0: {
pos = vec2<f32>(left, top);
switch input.vertex_index {
case 0u: {
pos = vec2(left, top);
out.f_tex_pos = input.tex_left_top;
}
case 1: {
pos = vec2<f32>(right, top);
out.f_tex_pos = vec2<f32>(input.tex_right_bottom.x, input.tex_left_top.y);
case 1u: {
pos = vec2(right, top);
out.f_tex_pos = vec2(input.tex_right_bottom.x, input.tex_left_top.y);
}
case 2: {
pos = vec2<f32>(left, bottom);
out.f_tex_pos = vec2<f32>(input.tex_left_top.x, input.tex_right_bottom.y);
case 2u: {
pos = vec2(left, bottom);
out.f_tex_pos = vec2(input.tex_left_top.x, input.tex_right_bottom.y);
}
case 3: {
pos = vec2<f32>(right, bottom);
case 3u: {
pos = vec2(right, bottom);
out.f_tex_pos = input.tex_right_bottom;
}
default: {}
}

out.f_color = input.color;
out.position = globals.transform * vec4<f32>(pos, input.left_top.z, 1.0);
out.position = globals.transform * vec4(pos, input.left_top.z, 1.0);

return out;
}

@fragment
fn fs_main(input: VertexOutput) -> @location(0) vec4<f32> {
var alpha: f32 = textureSample(font_tex, font_sampler, input.f_tex_pos).r;
fn fs_main(input: VertexOutput) -> @location(0) vec4f {
var alpha = textureSample(font_tex, font_sampler, input.f_tex_pos).r;

if (alpha <= 0.0) {
discard;
}

return input.f_color * vec4<f32>(1.0, 1.0, 1.0, alpha);
return input.f_color * vec4f(1.0, 1.0, 1.0, alpha);
}

0 comments on commit 4ac455a

Please sign in to comment.