1use ishou_tokens::TokenSet;
6
7pub fn render(t: &TokenSet) -> String {
8 let mut out = String::from("// ishou — pleme-io design tokens (GLSL, generated)\n\n");
9 for (k, v) in t.color.entries() {
10 out.push_str(&format!(
11 "#define ISHOU_{} vec3({:.4}, {:.4}, {:.4})\n",
12 k.to_uppercase(),
13 f32::from(v.r) / 255.0,
14 f32::from(v.g) / 255.0,
15 f32::from(v.b) / 255.0,
16 ));
17 }
18 let sh = &t.shader;
20 out.push_str("\n// Default shader uniforms\n");
21 out.push_str(&format!(
22 "#define ISHOU_BLOOM_THRESHOLD {:.3}\n",
23 sh.bloom.threshold
24 ));
25 out.push_str(&format!(
26 "#define ISHOU_BLOOM_INTENSITY {:.3}\n",
27 sh.bloom.intensity
28 ));
29 out.push_str(&format!(
30 "#define ISHOU_CA_MAGNITUDE {:.4}\n",
31 sh.chromatic_aberration.magnitude
32 ));
33 out.push_str(&format!(
34 "#define ISHOU_CURSOR_GLOW_RADIUS {:.2}\n",
35 sh.cursor_glow.radius_px
36 ));
37 out.push_str(&format!(
38 "#define ISHOU_FILM_GRAIN {:.4}\n",
39 sh.film_grain.intensity
40 ));
41 out.push_str(&format!(
42 "#define ISHOU_FROST_HAZE {:.3}\n",
43 sh.frost_haze.intensity
44 ));
45 out.push_str(&format!(
46 "#define ISHOU_SCREEN_CURV {:.4}\n",
47 sh.screen_curvature.curvature
48 ));
49 out.push_str(&format!(
50 "#define ISHOU_SCREEN_VIGN {:.3}\n",
51 sh.screen_curvature.vignette
52 ));
53 out.push_str(&format!(
54 "#define ISHOU_SONIC_INTENSITY {:.3}\n",
55 sh.sonic_boom.intensity
56 ));
57 out.push_str(&format!(
58 "#define ISHOU_SPOT_RADIUS {:.1}\n",
59 sh.spotlight.radius_px
60 ));
61 out.push_str(&format!(
62 "#define ISHOU_STARDUST_COUNT {}\n",
63 sh.stardust.particle_count
64 ));
65 out
66}