freya_hooks/
shader_uniforms.rs1use std::collections::HashMap;
2
3use freya_engine::prelude::RuntimeEffect;
4
5#[derive(Default)]
7pub struct UniformsBuilder {
8 uniforms: HashMap<String, UniformValue>,
9}
10
11pub enum UniformValue {
13 Float(f32),
14 #[allow(dead_code)]
15 FloatVec(Vec<f32>),
16}
17
18impl UniformsBuilder {
19 pub fn set(&mut self, name: &str, value: UniformValue) {
21 self.uniforms.insert(name.to_string(), value);
22 }
23
24 pub fn build(&self, shader: &RuntimeEffect) -> Vec<u8> {
26 let mut values = Vec::new();
27
28 for uniform in shader.uniforms().iter() {
29 let value = self.uniforms.get(uniform.name()).unwrap();
30 match &value {
31 UniformValue::Float(f) => {
32 values.extend(f.to_le_bytes());
33 }
34 UniformValue::FloatVec(f) => {
35 for n in f {
36 values.extend(n.to_le_bytes());
37 }
38 }
39 }
40 }
41
42 values
43 }
44}