Add support for single float uniforms to `pathfinder_gpu`

This commit is contained in:
Patrick Walton 2019-11-15 21:17:50 -08:00
parent 9260dbce93
commit fa54868eb1
3 changed files with 10 additions and 0 deletions

View File

@ -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();
}

View File

@ -151,6 +151,7 @@ pub enum ShaderKind {
#[derive(Clone, Copy)]
pub enum UniformData {
Float(f32),
Int(i32),
Mat2(F32x4),
Mat4([F32x4; 4]),

View File

@ -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::<NativeEndian>(value).unwrap()
}
UniformData::Int(value) => {
uniform_buffer_data.write_i32::<NativeEndian>(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))
}