# Shader Interface
What do I want out of a friendly Shader interface?
- Type-safe interface with uniforms.
- Temporary binding of shader (get CURRENT, set SELF, OP, set CURRENT)
- Optional memoization
- Save uniform update when CPU-side cache is validated
```rust
trait ShaderUpdate {
fn create_shader(&mut self) -> ShaderKey;
fn get_shader_mut(&mut self) -> &mut Shader;
fn use_shader(&mut self, shader: ShaderKey);
}
```