use awsm_renderer_materials::{
dynamic_layout::{
BufferSlotRuntime, FieldType, MaterialLayout, TextureSlotRuntime, UniformFieldRuntime,
},
MaterialAlphaMode,
};
#[allow(dead_code)]
fn build_scanline_registration() -> awsm_renderer::dynamic_materials::MaterialRegistration {
let layout = MaterialLayout {
uniforms: vec![
UniformFieldRuntime {
name: "tint".into(),
ty: FieldType::Color3,
},
UniformFieldRuntime {
name: "scan_freq".into(),
ty: FieldType::F32,
},
UniformFieldRuntime {
name: "scan_speed".into(),
ty: FieldType::F32,
},
UniformFieldRuntime {
name: "scan_strength".into(),
ty: FieldType::F32,
},
],
textures: vec![TextureSlotRuntime {
name: "base".into(),
}],
buffers: Vec::<BufferSlotRuntime>::new(),
};
let wgsl_fragment = r#"
let fg = frame_globals_from_raw(frame_globals_raw);
let uv = vec2<f32>(f32(input.coords.x), f32(input.coords.y))
/ vec2<f32>(f32(input.screen_dims.x), f32(input.screen_dims.y));
let scan = sin(uv.y * input.material.scan_freq
+ fg.time * input.material.scan_speed);
let overlay = mix(vec3<f32>(0.0), input.material.tint,
scan * input.material.scan_strength);
return OpaqueShadingOutput(overlay + vec3<f32>(0.5), 1.0);
"#
.to_string();
use std::hash::{Hash, Hasher};
let mut h = std::collections::hash_map::DefaultHasher::new();
"scanline".hash(&mut h);
for u in &layout.uniforms {
u.name.hash(&mut h);
}
let layout_hash = h.finish();
let mut h2 = std::collections::hash_map::DefaultHasher::new();
wgsl_fragment.hash(&mut h2);
let wgsl_hash = h2.finish();
awsm_renderer::dynamic_materials::MaterialRegistration {
name: "scanline".into(),
alpha_mode: MaterialAlphaMode::Opaque,
double_sided: false,
layout,
layout_hash,
wgsl_hash,
wgsl_fragment,
buffer_defaults: Vec::new(),
uniform_defaults: Vec::new(),
shader_includes: awsm_renderer_materials::ShaderIncludes::all(),
fragment_inputs: awsm_renderer_materials::FragmentInputs::all(),
alpha_wgsl: None,
wgsl_vertex: None,
}
}
fn main() {
let _reg = build_scanline_registration();
println!("Constructed a MaterialRegistration for `scanline`. ");
println!("In a real consumer, pass it to AwsmRenderer::register_material.");
}