From fa54868eb1bfa567101fc804e92fd7ec8b581f2f Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 15 Nov 2019 21:17:50 -0800 Subject: [PATCH] Add support for single float uniforms to `pathfinder_gpu` --- gl/src/lib.rs | 3 +++ gpu/src/lib.rs | 1 + metal/src/lib.rs | 6 ++++++ 3 files changed, 10 insertions(+) diff --git a/gl/src/lib.rs b/gl/src/lib.rs index 6e300c55..2bb8de93 100644 --- a/gl/src/lib.rs +++ b/gl/src/lib.rs @@ -153,6 +153,9 @@ impl GLDevice { fn set_uniform(&self, uniform: &GLUniform, data: &UniformData) { unsafe { match *data { + UniformData::Float(value) => { + gl::Uniform1f(uniform.location, value); ck(); + } UniformData::Int(value) => { gl::Uniform1i(uniform.location, value); ck(); } diff --git a/gpu/src/lib.rs b/gpu/src/lib.rs index 5e295c8d..eaaa0dc7 100644 --- a/gpu/src/lib.rs +++ b/gpu/src/lib.rs @@ -151,6 +151,7 @@ pub enum ShaderKind { #[derive(Clone, Copy)] pub enum UniformData { + Float(f32), Int(i32), Mat2(F32x4), Mat4([F32x4; 4]), diff --git a/metal/src/lib.rs b/metal/src/lib.rs index cd9da434..38843869 100644 --- a/metal/src/lib.rs +++ b/metal/src/lib.rs @@ -797,6 +797,9 @@ impl MetalDevice { for &(_, uniform_data) in render_state.uniforms.iter() { let start_index = uniform_buffer_data.len(); match uniform_data { + UniformData::Float(value) => { + uniform_buffer_data.write_f32::(value).unwrap() + } UniformData::Int(value) => { uniform_buffer_data.write_i32::(value).unwrap() } @@ -1145,6 +1148,9 @@ impl UniformDataExt for UniformData { unsafe { match *self { UniformData::TextureUnit(_) => None, + UniformData::Float(ref data) => { + Some(slice::from_raw_parts(data as *const f32 as *const u8, 4 * 1)) + } UniformData::Int(ref data) => { Some(slice::from_raw_parts(data as *const i32 as *const u8, 4 * 1)) }