use super::Resources;
use handle;
pub struct Builder<'a, R>
where R: Resources+'a,
R::Buffer: 'a,
R::ArrayBuffer: 'a,
R::Shader: 'a,
R::Program: 'a,
R::FrameBuffer: 'a,
R::Surface: 'a,
R::Texture: 'a,
R::Sampler: 'a,
R::Fence: 'a
{
pub shaders: Vec<&'a handle::Shader<R>>,
pub targets: Vec<&'a str>,
}
impl<'a, R> Builder<'a, R>
where R: Resources+'a,
R::Buffer: 'a,
R::ArrayBuffer: 'a,
R::Shader: 'a,
R::Program: 'a,
R::FrameBuffer: 'a,
R::Surface: 'a,
R::Texture: 'a,
R::Sampler: 'a,
R::Fence: 'a
{
pub fn new() -> Builder<'a, R> {
Builder{
shaders: Vec::new(),
targets: Vec::new(),
}
}
pub fn add_shader(mut self, shader: &'a handle::Shader<R>) -> Builder<'a, R> {
self.shaders.push(shader);
self
}
pub fn add_shaders(mut self, shaders: &[&'a handle::Shader<R>]) -> Builder<'a, R> {
for s in shaders {
self = self.add_shader(s);
}
self
}
pub fn add_target(mut self, target: &'a str) -> Builder<'a, R> {
self.targets.push(target);
self
}
pub fn add_targets(mut self, targets: &[&'a str]) -> Builder<'a, R> {
for t in targets {
self = self.add_target(t);
}
self
}
}