Dbg.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include "anki/renderer/Dbg.h"
  2. #include "anki/renderer/Renderer.h"
  3. #include "anki/resource/ShaderProgramResource.h"
  4. #include "anki/scene/Scene.h"
  5. #include "anki/scene/Light.h"
  6. #include "anki/core/Logger.h"
  7. namespace anki {
  8. //==============================================================================
  9. Dbg::~Dbg()
  10. {}
  11. //==============================================================================
  12. void Dbg::init(const Renderer::Initializer& initializer)
  13. {
  14. enabled = initializer.dbg.enabled;
  15. if(!enabled)
  16. {
  17. return;
  18. }
  19. try
  20. {
  21. fbo.create();
  22. fbo.setColorAttachments({&r->getPps().getFai()});
  23. fbo.setOtherAttachment(GL_DEPTH_ATTACHMENT, r->getMs().getDepthFai());
  24. if(!fbo.isComplete())
  25. {
  26. throw ANKI_EXCEPTION("FBO is incomplete");
  27. }
  28. }
  29. catch(std::exception& e)
  30. {
  31. throw ANKI_EXCEPTION("Cannot create debug FBO") << e;
  32. }
  33. drawer.reset(new DebugDrawer);
  34. sceneDrawer.reset(new SceneDebugDrawer(drawer.get()));
  35. }
  36. //==============================================================================
  37. void Dbg::run()
  38. {
  39. ANKI_ASSERT(enabled);
  40. Scene& scene = r->getScene();
  41. fbo.bind();
  42. GlStateSingleton::get().disable(GL_BLEND);
  43. GlStateSingleton::get().enable(GL_DEPTH_TEST, depthTest);
  44. drawer->setViewProjectionMatrix(r->getViewProjectionMatrix());
  45. drawer->setModelMatrix(Mat4::getIdentity());
  46. //drawer->drawGrid();
  47. for(auto it = scene.getSceneNodesBegin();
  48. it != scene.getSceneNodesEnd(); it++)
  49. {
  50. SceneNode* node = *it;
  51. Spatial* sp = node->getSpatial();
  52. if(sp)
  53. {
  54. sceneDrawer->draw(*node);
  55. }
  56. }
  57. /*for(const Sector* sector : scene.sectors)
  58. {
  59. sceneDrawer->draw(sector->getOctree());
  60. }*/
  61. scene.getPhysics().debugDraw();
  62. drawer->flush();
  63. }
  64. } // end namespace anki