pub unsafe trait Shader {
type StageRepr;
type ProgramRepr;
type UniformBuilderRepr;
unsafe fn new_stage(
&mut self,
ty: StageType,
src: &str
) -> Result<Self::StageRepr, StageError>;
unsafe fn new_program(
&mut self,
vertex: &Self::StageRepr,
tess: Option<TessellationStages<'_, Self::StageRepr>>,
geometry: Option<&Self::StageRepr>,
fragment: &Self::StageRepr
) -> Result<Self::ProgramRepr, ProgramError>;
unsafe fn apply_semantics<Sem>(
program: &mut Self::ProgramRepr
) -> Result<Vec<VertexAttribWarning>, ProgramError>
where
Sem: Semantics;
unsafe fn new_uniform_builder(
program: &mut Self::ProgramRepr
) -> Result<Self::UniformBuilderRepr, ProgramError>;
unsafe fn ask_uniform<T>(
uniform_builder: &mut Self::UniformBuilderRepr,
name: &str
) -> Result<Uniform<T>, UniformWarning>
where
T: Uniformable<Self>;
unsafe fn unbound<T>(
uniform_builder: &mut Self::UniformBuilderRepr
) -> Uniform<T>
where
T: Uniformable<Self>;
}