use std::ptr;
use traits::Wrappable;
use graphics::{BlendMode, Shader, Texture, Transform};
use csfml_graphics_sys as ffi;
pub struct RenderStates<'s> {
sf_render_states: ffi::sfRenderStates,
pub blend_mode: BlendMode,
pub transform: Transform,
pub texture: Option<&'s Texture>,
pub shader: Option<&'s Shader<'s>>
}
impl<'s> RenderStates<'s> {
pub fn new(blend_mode: BlendMode,
transform: Transform,
texture: Option<&'s Texture>,
shader: Option<&'s Shader<'s>>) -> RenderStates<'s> {
RenderStates {
sf_render_states: ffi::sfRenderStates {
blendMode: blend_mode.0,
transform: transform.0,
texture: ptr::null_mut(),
shader: ptr::null_mut()
},
blend_mode: blend_mode,
transform: transform,
texture: texture,
shader: shader
}
}
#[doc(hidden)]
pub fn unwrap(&mut self) -> *mut ffi::sfRenderStates {
self.sf_render_states.blendMode = self.blend_mode.0;
self.sf_render_states.transform = self.transform.0;
self.sf_render_states.texture = if !self.texture.is_none() {
self.texture.unwrap().unwrap()
} else {
ptr::null_mut()
};
self.sf_render_states.shader = if !self.shader.is_none() {
self.shader.unwrap().unwrap()
} else {
ptr::null_mut()
};
&mut self.sf_render_states as *mut ffi::sfRenderStates
}
}
impl<'s> Default for RenderStates<'s> {
fn default() -> RenderStates<'s> {
RenderStates {
sf_render_states: ffi::sfRenderStates {
blendMode: BlendMode::blend_alpha().0,
transform: Transform::new_identity().0,
texture: ptr::null_mut(),
shader: ptr::null_mut()
},
blend_mode: BlendMode::blend_alpha(),
transform: Transform::new_identity(),
texture: None,
shader: None
}
}
}