ribir_gpu 0.4.0-alpha.64

A non-intrusive declarative GUI framework, to build modern native/wasm cross-platform applications.
Documentation
@group(0) @binding(0) 
var<uniform> view_size: vec4<u32>;

// An 8x sample provides better quality than a 4x sample in text rendering. 
// https://learn.microsoft.com/en-us/windows/win32/api/d3d11/ne-d3d11-d3d11_standard_multisample_quality_levels 
const sample_pattern: array<vec2f, 8> = array(
  // 4x sample pattern
  // vec2(-6.0, 2.0) / 16.0,
  // vec2(-2.0, -6.0) / 16.0,
  // vec2(2.0, 6.0) / 16.0
  // vec2(6.0, -2.0) / 16.0,

  // 8x sample pattern
  vec2( -7. / 16.,  -1. / 16.),
  vec2( -5. / 16.,  5. / 16.),
  vec2( -3. / 16.,  -5. / 16.),
  vec2( -1. / 16.,  3. / 16.),
  vec2(1. / 16., -3. / 16.),
  vec2( 3. / 16.,  7. / 16.),
  vec2( 5. / 16., 1. / 16.),
  vec2( 7. / 16.,  -7. / 16.)
);
const sample_size: u32 = 8;


@vertex
fn vs_main(@location(0) pos: vec2<f32>, @builtin(instance_index) instance: u32) -> @builtin(position) vec4<f32> {
  
  let size = vec2(f32(view_size.x), f32(view_size.y));
  var sample_pos = pos + sample_pattern[instance % sample_size];
  sample_pos = sample_pos * vec2(2., -2.)  / size + vec2(-1., 1.);
    return vec4<f32>(sample_pos, 0.0, 1.0);
}

@fragment
fn fs_main() -> @location(0) vec4<f32> {
  let value: f32 = 1.0 / f32(sample_size);
  return vec4(value, value, value, value);
}