Advertisement
Guest User

Untitled

a guest
Aug 25th, 2016
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1. pub struct DrawService {
  2. display: Rc<Display>,
  3. frame: Frame,
  4. program: Program,
  5. perspective: PerspectiveMatrix3<f32>,
  6. }
  7.  
  8. impl DrawService {
  9. fn build_perspective(frame: &Frame) -> PerspectiveMatrix3<f32> {
  10. let (width, height) = frame.get_dimensions();
  11.  
  12. let fov: f32 = ::std::f32::consts::PI / 3.0;
  13. let zfar = 1024.0;
  14. let znear = 0.001;
  15.  
  16. PerspectiveMatrix3::new(width as f32 / height as f32, fov, znear, zfar)
  17. }
  18.  
  19. pub fn new(display: Rc<Display>, program: Program) -> DrawService {
  20. let mut frame = display.draw();
  21. frame.clear_color_and_depth((0.0, 0.0, 0.0, 1.0), 1.0);
  22. let perspective = DrawService::build_perspective(&frame);
  23. DrawService {
  24. display: display,
  25. program: program,
  26. frame: frame,
  27. perspective: perspective,
  28. }
  29. }
  30.  
  31. // TODO: Switch to trait object when glium updates.
  32. pub fn facade(&self) -> &Display {
  33. &self.display
  34. }
  35.  
  36. pub fn update_perspective(&mut self) {
  37. self.perspective = DrawService::build_perspective(&self.frame);
  38. }
  39.  
  40. pub fn flush(&mut self) {
  41. // TODO: Update framerate
  42. self.frame.set_finish();
  43.  
  44. self.frame = self.display.draw();
  45. self.frame.clear_color_and_depth((0.0, 0.0, 0.0, 1.0), 1.0);
  46. }
  47.  
  48. pub fn draw_buffer<'a, 'b, I, V>(&mut self, model_view: &Matrix4<f32>, vertices: V, indices: I)
  49. where I: Into<IndicesSource<'a>>, V: MultiVerticesSource<'b> {
  50. let uniforms = uniform! {
  51. model_view: model_view.as_ref().clone(),
  52. perspective: self.perspective.as_matrix().as_ref().clone(),
  53. };
  54.  
  55. use glium::{DrawParameters, Depth};
  56. use glium::draw_parameters::{DepthTest, BackfaceCullingMode};
  57. let params = DrawParameters {
  58. depth: Depth {
  59. test: DepthTest::IfLess,
  60. write: true,
  61. .. Default::default()
  62. },
  63. backface_culling: BackfaceCullingMode::CullClockwise,
  64. .. Default::default()
  65. };
  66.  
  67. self.frame.draw(vertices, indices, &self.program, &uniforms, &params).unwrap();
  68. }
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement