renderer.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include <wallpaperengine/irrlicht.h>
  2. #include <wallpaperengine/video/renderer.h>
  3. namespace wp
  4. {
  5. namespace video
  6. {
  7. void renderer::queueNode (node* node)
  8. {
  9. s_nodes.push_back (node);
  10. }
  11. void renderer::setupOrthographicCamera (irr::f32 width, irr::f32 height, irr::core::vector3df position, irr::core::vector3df lookat, irr::f32 znear, irr::f32 zfar)
  12. {
  13. irr::core::matrix4 identity; identity.makeIdentity ();
  14. irr::core::matrix4 orthoProjection; orthoProjection.buildProjectionMatrixOrthoLH(
  15. width,
  16. height,
  17. znear,
  18. zfar
  19. );
  20. wp::irrlicht::camera = wp::irrlicht::device->getSceneManager ()->addCameraSceneNode (0, position, lookat);
  21. wp::irrlicht::camera->setProjectionMatrix (orthoProjection);
  22. wp::irrlicht::driver->setTransform (irr::video::ETS_PROJECTION, orthoProjection);
  23. wp::irrlicht::driver->setTransform (irr::video::ETS_VIEW, identity);
  24. wp::irrlicht::driver->setTransform (irr::video::ETS_WORLD, identity);
  25. }
  26. void renderer::render ()
  27. {
  28. if (wp::irrlicht::driver == nullptr) return;
  29. wp::irrlicht::driver->beginScene(true, true, irr::video::SColor(0, 0, 0, 0));
  30. std::vector<node*>::const_iterator cur = s_nodes.begin ();
  31. std::vector<node*>::const_iterator end = s_nodes.end ();
  32. for(; cur != end; cur ++)
  33. {
  34. (*cur)->render ();
  35. }
  36. wp::irrlicht::driver->endScene ();
  37. }
  38. std::vector<node*> renderer::s_nodes;
  39. }
  40. };