veloren_voxygen/render/renderer/
shaders.rs1use common::assets::{self, AssetExt, AssetHandle};
2use hashbrown::HashMap;
3
4pub struct Glsl(pub String);
6
7impl From<String> for Glsl {
8 fn from(s: String) -> Glsl { Glsl(s) }
9}
10
11impl assets::Asset for Glsl {
12 type Loader = assets::LoadFrom<String, assets::StringLoader>;
13
14 const EXTENSION: &'static str = "glsl";
15}
16
17#[derive(Clone)]
20pub struct Shaders {
21 shaders: HashMap<String, AssetHandle<Glsl>>,
22}
23
24impl assets::Compound for Shaders {
25 fn load(_: assets::AnyCache, _: &assets::SharedString) -> Result<Shaders, assets::BoxedError> {
28 let shaders = [
29 "include.constants",
30 "include.globals",
31 "include.sky",
32 "include.light",
33 "include.srgb",
34 "include.random",
35 "include.lod",
36 "include.shadows",
37 "include.rain_occlusion",
38 "include.point_glow",
39 "include.fxaa",
40 "antialias.none",
41 "antialias.bilinear",
42 "antialias.fxaa",
43 "antialias.msaa-x4",
44 "antialias.msaa-x8",
45 "antialias.msaa-x16",
46 "antialias.hqx",
47 "antialias.fxupscale",
48 "include.cloud.none",
49 "include.cloud.regular",
50 "figure-vert",
51 "light-shadows-figure-vert",
52 "light-shadows-directed-vert",
53 "light-shadows-debug-vert",
54 "rain-occlusion-figure-vert",
55 "rain-occlusion-directed-vert",
56 "point-light-shadows-vert",
57 "skybox-vert",
58 "skybox-frag",
59 "debug-vert",
60 "debug-frag",
61 "figure-frag",
62 "rope-vert",
63 "rope-frag",
64 "terrain-vert",
65 "terrain-frag",
66 "fluid-vert",
67 "fluid-frag.cheap",
68 "fluid-frag.shiny",
69 "sprite-vert",
70 "sprite-frag",
71 "lod-object-vert",
72 "lod-object-frag",
73 "particle-vert",
74 "particle-frag",
75 "trail-vert",
76 "trail-frag",
77 "ui-vert",
78 "ui-frag",
79 "premultiply-alpha-vert",
80 "premultiply-alpha-frag",
81 "lod-terrain-vert",
82 "lod-terrain-frag",
83 "clouds-vert",
84 "clouds-frag",
85 "dual-downsample-filtered-frag",
86 "dual-downsample-frag",
87 "dual-upsample-frag",
88 "clouds-frag",
89 "postprocess-vert",
90 "postprocess-frag",
91 "blit-vert",
92 "blit-frag",
93 ];
96
97 let shaders = shaders
98 .iter()
99 .map(|shader| {
100 let full_specifier = ["voxygen.shaders.", shader].concat();
101 let asset = AssetExt::load(&full_specifier)?;
102 Ok((String::from(*shader), asset))
103 })
104 .collect::<Result<HashMap<_, _>, assets::Error>>()?;
105
106 Ok(Self { shaders })
107 }
108}
109
110impl Shaders {
111 pub fn get(&self, shader: &str) -> Option<impl core::ops::Deref<Target = Glsl>> {
112 self.shaders.get(shader).map(|a| a.read())
113 }
114}