summaryrefslogtreecommitdiff
path: root/src/shader.wgsl
diff options
context:
space:
mode:
authorTengu712 <genreihoutengu@gmail.com>2026-10-01 01:53:23 +0900
committerTengu712 <genreihoutengu@gmail.com>2026-10-01 01:53:23 +0900
commit2c104d7936193bb19eb52b3e4d47657ffb18a9d7 (patch)
tree6f90ea406a1506bbb37ee3aea52a29278524074a /src/shader.wgsl
parente3835c956011c217e498b272490005dca457d402 (diff)
render text
Diffstat (limited to 'src/shader.wgsl')
-rw-r--r--src/shader.wgsl22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/shader.wgsl b/src/shader.wgsl
index c154cc4..e0b34f4 100644
--- a/src/shader.wgsl
+++ b/src/shader.wgsl
@@ -1,18 +1,30 @@
-@group(0) @binding(0) var tex_sampler: sampler;
-@group(0) @binding(1) var font_tex: texture_2d<f32>;
+struct Instance {
+ position: vec2<f32>,
+ scale: vec2<f32>,
+ uv: vec4<f32>,
+}
struct VertexOutput {
@builtin(position) position: vec4<f32>,
@location(0) uv: vec2<f32>,
}
+@group(0) @binding(0) var<storage, read> instances: array<Instance>;
+
+@group(1) @binding(0) var tex_sampler: sampler;
+@group(1) @binding(1) var font_tex: texture_2d<f32>;
+
@vertex
-fn vs_main(@builtin(vertex_index) in_vertex_index: u32) -> VertexOutput {
+fn vs_main(
+ @builtin(vertex_index) in_vertex_index: u32,
+ @builtin(instance_index) in_instance_index: u32,
+) -> VertexOutput {
let uv = vec2<f32>(f32((in_vertex_index << 1) & 2), f32(in_vertex_index & 2)) / 2.0;
+ let instance = instances[in_instance_index];
var out: VertexOutput;
- out.position = vec4<f32>(uv.x - 0.5, uv.y - 0.5, 0.0, 1.0);
- out.uv = uv;
+ out.position = vec4<f32>(instance.position + (uv - 0.5) * instance.scale * 2.0, 0.0, 1.0);
+ out.uv = instance.uv.xy + vec2<f32>(uv.x, 1.0 - uv.y) * instance.uv.zw;
return out;
}