Skip to repository content

tenant.openagents/omega

No repository description is available.

OpenAgents Git authority 2026-07-28T02:37:11.823Z Public web read
NIP-34 coordinate30617:7649603503856e5148d571eac2766b288a8ff1e9e35d380337a1d2b0015b4f92:omega
MaintainersHidden in public view
References2 branches · 1 tag
Read-only clonegit clone https://openagents.com/git/tenant.openagents/omega.git
Browse files

shaders_subpixel.wgsl

57 lines · 2.1 KB · text
1// --- subpixel sprites --- //
2
3struct SubpixelSprite {
4    order: u32,
5    pad: u32,
6    bounds: Bounds,
7    content_mask: Bounds,
8    color: Hsla,
9    tile: AtlasTile,
10    transformation: TransformationMatrix,
11}
12@group(1) @binding(0) var<storage, read> b_subpixel_sprites: array<SubpixelSprite>;
13
14struct SubpixelSpriteOutput {
15    @builtin(position) position: vec4<f32>,
16    @location(0) tile_position: vec2<f32>,
17    @location(1) @interpolate(flat) color: vec4<f32>,
18    @location(3) clip_distances: vec4<f32>,
19}
20
21struct SubpixelSpriteFragmentOutput {
22    @location(0) @blend_src(0) foreground: vec4<f32>,
23    @location(0) @blend_src(1) alpha: vec4<f32>,
24}
25
26@vertex
27fn vs_subpixel_sprite(@builtin(vertex_index) vertex_id: u32, @builtin(instance_index) instance_id: u32) -> SubpixelSpriteOutput {
28    let unit_vertex = vec2<f32>(f32(vertex_id & 1u), 0.5 * f32(vertex_id & 2u));
29    let sprite = b_subpixel_sprites[instance_id];
30
31    var out = SubpixelSpriteOutput();
32    out.position = to_device_position_transformed(unit_vertex, sprite.bounds, sprite.transformation);
33    out.tile_position = to_tile_position(unit_vertex, sprite.tile);
34    out.color = hsla_to_rgba(sprite.color);
35    out.clip_distances = distance_from_clip_rect_transformed(unit_vertex, sprite.bounds, sprite.content_mask, sprite.transformation);
36    return out;
37}
38
39@fragment
40fn fs_subpixel_sprite(input: SubpixelSpriteOutput) -> SubpixelSpriteFragmentOutput {
41    var sample = textureSample(t_sprite, s_sprite, input.tile_position).rgb;
42    if (gamma_params.is_bgr != 0u) {
43        sample = sample.bgr;
44    }
45    let alpha_corrected = apply_contrast_and_gamma_correction3(sample, input.color.rgb, gamma_params.subpixel_enhanced_contrast, gamma_params.gamma_ratios);
46
47    // Alpha clip after using the derivatives.
48    if (any(input.clip_distances < vec4<f32>(0.0))) {
49        return SubpixelSpriteFragmentOutput(vec4<f32>(0.0), vec4<f32>(0.0));
50    }
51
52    var out = SubpixelSpriteFragmentOutput();
53    out.foreground = vec4<f32>(input.color.rgb, 1.0);
54    out.alpha = vec4<f32>(input.color.a * alpha_corrected, 1.0);
55    return out;
56}
57
Served at tenant.openagents/omega Member data and write actions are omitted.