1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
use super::*; mod errors { error_chain! { errors { } } } use self::errors::*; #[derive(Debug, Copy, Clone)] pub enum UniformValue<'a> { Uniform1f(f32), Uniform2f(f32, f32), Uniform3f(f32, f32, f32), Uniform4f(f32, f32, f32, f32), Uniform1i(i32), Uniform2i(i32, i32), Uniform3i(i32, i32, i32), Uniform4i(i32, i32, i32, i32), Uniform1ui(u32), Uniform2ui(u32, u32), Uniform3ui(u32, u32, u32), Uniform4ui(u32, u32, u32, u32), Uniform1fv(&'a [f32]), Uniform2fv(&'a [[f32; 2]]), Uniform3fv(&'a [[f32; 3]]), Uniform4fv(&'a [[f32; 4]]), Uniform1iv(&'a [i32]), Uniform2iv(&'a [[i32; 2]]), Uniform3iv(&'a [[i32; 3]]), Uniform4iv(&'a [[i32; 4]]), Uniform1uiv(&'a [u32]), Uniform2uiv(&'a [[u32; 2]]), Uniform3uiv(&'a [[u32; 3]]), Uniform4uiv(&'a [[u32; 4]]), UniformMatrix2f([f32; 4]), UniformMatrix3f([f32; 9]), UniformMatrix4f([f32; 16]), } pub fn program_uniform(id: ProgramId, location: usize, uniform: UniformValue) -> Result<()> { unsafe { match uniform { UniformValue::Uniform1f(f) => program_uniform_1f(id, location, f), UniformValue::Uniform2f(f1, f2) => program_uniform_2f(id, location, f1, f2), UniformValue::Uniform3f(f1, f2, f3) => program_uniform_3f(id, location, f1, f2, f3), UniformValue::Uniform4f(f1, f2, f3, f4) => program_uniform_4f(id, location, f1, f2, f3, f4), UniformValue::Uniform1i(i) => program_uniform_1i(id, location, i), UniformValue::Uniform2i(i1, i2) => program_uniform_2i(id, location, i1, i2), UniformValue::Uniform3i(i1, i2, i3) => program_uniform_3i(id, location, i1, i2, i3), UniformValue::Uniform4i(i1, i2, i3, i4) => program_uniform_4i(id, location, i1, i2, i3, i4), UniformValue::Uniform1ui(ui) => program_uniform_1ui(id, location, ui), UniformValue::Uniform2ui(ui1, ui2) => program_uniform_2ui(id, location, ui1, ui2), UniformValue::Uniform3ui(ui1, ui2, ui3) => program_uniform_3ui(id, location, ui1, ui2, ui3), UniformValue::Uniform4ui(ui1, ui2, ui3, ui4) => program_uniform_4ui(id, location, ui1, ui2, ui3, ui4), UniformValue::Uniform1fv(fv) => program_uniform_1fv(id, location, fv), UniformValue::Uniform2fv(fv) => program_uniform_2fv(id, location, fv), UniformValue::Uniform3fv(fv) => program_uniform_3fv(id, location, fv), UniformValue::Uniform4fv(fv) => program_uniform_4fv(id, location, fv), UniformValue::Uniform1iv(iv) => program_uniform_1iv(id, location, iv), UniformValue::Uniform2iv(iv) => program_uniform_2iv(id, location, iv), UniformValue::Uniform3iv(iv) => program_uniform_3iv(id, location, iv), UniformValue::Uniform4iv(iv) => program_uniform_4iv(id, location, iv), UniformValue::Uniform1uiv(uiv) => program_uniform_1uiv(id, location, uiv), UniformValue::Uniform2uiv(uiv) => program_uniform_2uiv(id, location, uiv), UniformValue::Uniform3uiv(uiv) => program_uniform_3uiv(id, location, uiv), UniformValue::Uniform4uiv(uiv) => program_uniform_4uiv(id, location, uiv), UniformValue::UniformMatrix2f(mat2) => program_uniform_matrix_2f(id, location, mat2), UniformValue::UniformMatrix3f(mat3) => program_uniform_matrix_3f(id, location, mat3), UniformValue::UniformMatrix4f(mat4) => program_uniform_matrix_4f(id, location, mat4), }.chain_err(|| "Could not set uniform") } }