Trait luminance::shader::program::HasProgram
[−]
[src]
pub trait HasProgram: HasStage { type Program; fn new_program(tess: Option<(&Self::AStage, &Self::AStage)>,
vertex: &Self::AStage,
geometry: Option<&Self::AStage>,
fragment: &Self::AStage,
sem_map: &[Sem])
-> Result<(Self::Program, Vec<UniformWarning>), ProgramError>; fn free_program(program: &mut Self::Program); fn update_uniforms<F>(program: &Self::Program, f: F) where F: Fn(); fn update1_i32(program: &Self::Program, uniform: SemIndex, x: i32); fn update2_i32(program: &Self::Program, uniform: SemIndex, xy: [i32; 2]); fn update3_i32(program: &Self::Program, uniform: SemIndex, xyz: [i32; 3]); fn update4_i32(program: &Self::Program, uniform: SemIndex, xyzw: [i32; 4]); fn update1_slice_i32(program: &Self::Program, uniform: SemIndex, x: &[i32]); fn update2_slice_i32(program: &Self::Program,
uniform: SemIndex,
xy: &[[i32; 2]]); fn update3_slice_i32(program: &Self::Program,
uniform: SemIndex,
xyz: &[[i32; 3]]); fn update4_slice_i32(program: &Self::Program,
uniform: SemIndex,
xyzw: &[[i32; 4]]); fn update1_u32(program: &Self::Program, uniform: SemIndex, x: u32); fn update2_u32(program: &Self::Program, uniform: SemIndex, xy: [u32; 2]); fn update3_u32(program: &Self::Program, uniform: SemIndex, xyz: [u32; 3]); fn update4_u32(program: &Self::Program, uniform: SemIndex, xyzw: [u32; 4]); fn update1_slice_u32(program: &Self::Program, uniform: SemIndex, x: &[u32]); fn update2_slice_u32(program: &Self::Program,
uniform: SemIndex,
xy: &[[u32; 2]]); fn update3_slice_u32(program: &Self::Program,
uniform: SemIndex,
xyz: &[[u32; 3]]); fn update4_slice_u32(program: &Self::Program,
uniform: SemIndex,
xyzw: &[[u32; 4]]); fn update1_f32(program: &Self::Program, uniform: SemIndex, x: f32); fn update2_f32(program: &Self::Program, uniform: SemIndex, xy: [f32; 2]); fn update3_f32(program: &Self::Program, uniform: SemIndex, xyz: [f32; 3]); fn update4_f32(program: &Self::Program, uniform: SemIndex, xyzw: [f32; 4]); fn update1_slice_f32(program: &Self::Program, uniform: SemIndex, x: &[f32]); fn update2_slice_f32(program: &Self::Program,
uniform: SemIndex,
xy: &[[f32; 2]]); fn update3_slice_f32(program: &Self::Program,
uniform: SemIndex,
xyz: &[[f32; 3]]); fn update4_slice_f32(program: &Self::Program,
uniform: SemIndex,
xyzw: &[[f32; 4]]); fn update22_f32(program: &Self::Program, uniform: SemIndex, x: M22); fn update33_f32(program: &Self::Program, uniform: SemIndex, x: M33); fn update44_f32(program: &Self::Program, uniform: SemIndex, x: M44); fn update22_slice_f32(program: &Self::Program, uniform: SemIndex, x: &[M22]); fn update33_slice_f32(program: &Self::Program, uniform: SemIndex, x: &[M33]); fn update44_slice_f32(program: &Self::Program, uniform: SemIndex, x: &[M44]); fn update1_bool(program: &Self::Program, uniform: SemIndex, x: bool); fn update2_bool(program: &Self::Program, uniform: SemIndex, xy: [bool; 2]); fn update3_bool(program: &Self::Program, uniform: SemIndex, xyz: [bool; 3]); fn update4_bool(program: &Self::Program, uniform: SemIndex, xyzw: [bool; 4]); fn update1_slice_bool(program: &Self::Program, uniform: SemIndex, x: &[bool]); fn update2_slice_bool(program: &Self::Program,
uniform: SemIndex,
xy: &[[bool; 2]]); fn update3_slice_bool(program: &Self::Program,
uniform: SemIndex,
xyz: &[[bool; 3]]); fn update4_slice_bool(program: &Self::Program,
uniform: SemIndex,
xyzw: &[[bool; 4]]); fn update_texture_unit(program: &Self::Program, uniform: SemIndex, unit: u32); fn update_buffer_binding(program: &Self::Program,
uniform_block: SemIndex,
binding: u32); }
Trait to implement to provide shader program features.
Associated Types
type Program
Required Methods
fn new_program(tess: Option<(&Self::AStage, &Self::AStage)>,
vertex: &Self::AStage,
geometry: Option<&Self::AStage>,
fragment: &Self::AStage,
sem_map: &[Sem])
-> Result<(Self::Program, Vec<UniformWarning>), ProgramError>
vertex: &Self::AStage,
geometry: Option<&Self::AStage>,
fragment: &Self::AStage,
sem_map: &[Sem])
-> Result<(Self::Program, Vec<UniformWarning>), ProgramError>
Create a new program by linking it with stages.
The last argument – sem_map
– is a mapping between your semantic and the names of the code
variables they represent. Each semantic is represented by the index of the name in the slice
you pass in.
Examples
TODO
fn free_program(program: &mut Self::Program)
Free a program.
fn update_uniforms<F>(program: &Self::Program, f: F) where F: Fn()
Bulk update of uniforms. The update closure should contain the code used to update as many uniforms as wished.
fn update1_i32(program: &Self::Program, uniform: SemIndex, x: i32)
fn update2_i32(program: &Self::Program, uniform: SemIndex, xy: [i32; 2])
fn update3_i32(program: &Self::Program, uniform: SemIndex, xyz: [i32; 3])
fn update4_i32(program: &Self::Program, uniform: SemIndex, xyzw: [i32; 4])
fn update1_slice_i32(program: &Self::Program, uniform: SemIndex, x: &[i32])
fn update2_slice_i32(program: &Self::Program,
uniform: SemIndex,
xy: &[[i32; 2]])
uniform: SemIndex,
xy: &[[i32; 2]])
fn update3_slice_i32(program: &Self::Program,
uniform: SemIndex,
xyz: &[[i32; 3]])
uniform: SemIndex,
xyz: &[[i32; 3]])
fn update4_slice_i32(program: &Self::Program,
uniform: SemIndex,
xyzw: &[[i32; 4]])
uniform: SemIndex,
xyzw: &[[i32; 4]])
fn update1_u32(program: &Self::Program, uniform: SemIndex, x: u32)
fn update2_u32(program: &Self::Program, uniform: SemIndex, xy: [u32; 2])
fn update3_u32(program: &Self::Program, uniform: SemIndex, xyz: [u32; 3])
fn update4_u32(program: &Self::Program, uniform: SemIndex, xyzw: [u32; 4])
fn update1_slice_u32(program: &Self::Program, uniform: SemIndex, x: &[u32])
fn update2_slice_u32(program: &Self::Program,
uniform: SemIndex,
xy: &[[u32; 2]])
uniform: SemIndex,
xy: &[[u32; 2]])
fn update3_slice_u32(program: &Self::Program,
uniform: SemIndex,
xyz: &[[u32; 3]])
uniform: SemIndex,
xyz: &[[u32; 3]])
fn update4_slice_u32(program: &Self::Program,
uniform: SemIndex,
xyzw: &[[u32; 4]])
uniform: SemIndex,
xyzw: &[[u32; 4]])
fn update1_f32(program: &Self::Program, uniform: SemIndex, x: f32)
fn update2_f32(program: &Self::Program, uniform: SemIndex, xy: [f32; 2])
fn update3_f32(program: &Self::Program, uniform: SemIndex, xyz: [f32; 3])
fn update4_f32(program: &Self::Program, uniform: SemIndex, xyzw: [f32; 4])
fn update1_slice_f32(program: &Self::Program, uniform: SemIndex, x: &[f32])
fn update2_slice_f32(program: &Self::Program,
uniform: SemIndex,
xy: &[[f32; 2]])
uniform: SemIndex,
xy: &[[f32; 2]])
fn update3_slice_f32(program: &Self::Program,
uniform: SemIndex,
xyz: &[[f32; 3]])
uniform: SemIndex,
xyz: &[[f32; 3]])
fn update4_slice_f32(program: &Self::Program,
uniform: SemIndex,
xyzw: &[[f32; 4]])
uniform: SemIndex,
xyzw: &[[f32; 4]])
fn update22_f32(program: &Self::Program, uniform: SemIndex, x: M22)
fn update33_f32(program: &Self::Program, uniform: SemIndex, x: M33)
fn update44_f32(program: &Self::Program, uniform: SemIndex, x: M44)
fn update22_slice_f32(program: &Self::Program, uniform: SemIndex, x: &[M22])
fn update33_slice_f32(program: &Self::Program, uniform: SemIndex, x: &[M33])
fn update44_slice_f32(program: &Self::Program, uniform: SemIndex, x: &[M44])
fn update1_bool(program: &Self::Program, uniform: SemIndex, x: bool)
fn update2_bool(program: &Self::Program, uniform: SemIndex, xy: [bool; 2])
fn update3_bool(program: &Self::Program, uniform: SemIndex, xyz: [bool; 3])
fn update4_bool(program: &Self::Program, uniform: SemIndex, xyzw: [bool; 4])
fn update1_slice_bool(program: &Self::Program, uniform: SemIndex, x: &[bool])
fn update2_slice_bool(program: &Self::Program,
uniform: SemIndex,
xy: &[[bool; 2]])
uniform: SemIndex,
xy: &[[bool; 2]])
fn update3_slice_bool(program: &Self::Program,
uniform: SemIndex,
xyz: &[[bool; 3]])
uniform: SemIndex,
xyz: &[[bool; 3]])
fn update4_slice_bool(program: &Self::Program,
uniform: SemIndex,
xyzw: &[[bool; 4]])
uniform: SemIndex,
xyzw: &[[bool; 4]])
fn update_texture_unit(program: &Self::Program, uniform: SemIndex, unit: u32)
fn update_buffer_binding(program: &Self::Program,
uniform_block: SemIndex,
binding: u32)
uniform_block: SemIndex,
binding: u32)