BsOverlayManager.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #include "BsOverlayManager.h"
  2. #include "BsCamera.h"
  3. #include "BsOverlay.h"
  4. using namespace CamelotFramework;
  5. namespace BansheeEngine
  6. {
  7. bool OverlayManager::OverlayComparer::operator() (const Overlay* const& a, const Overlay* const& b)
  8. {
  9. return a->getDepth() > b->getDepth();
  10. }
  11. void OverlayManager::render(CM::ViewportPtr& target, CoreAccessor& coreAccessor) const
  12. {
  13. auto overlays = mOverlaysPerTarget.find(target.get());
  14. if(overlays == mOverlaysPerTarget.end())
  15. return;
  16. coreAccessor.setViewport(target);
  17. // Render all overlays. They should already be sorted by depth, front most rendering last
  18. for(auto& overlay : overlays->second)
  19. {
  20. overlay->render(coreAccessor);
  21. }
  22. }
  23. void OverlayManager::attachOverlay(const CM::Viewport* target, const Overlay* overlay)
  24. {
  25. mOverlaysPerTarget[target].insert(overlay);
  26. }
  27. void OverlayManager::detachOverlay(const CM::Viewport* target, const Overlay* overlay)
  28. {
  29. mOverlaysPerTarget[target].erase(overlay);
  30. }
  31. void OverlayManager::detachOverlayFromAll(const Overlay* overlay)
  32. {
  33. for(auto& overlays : mOverlaysPerTarget)
  34. {
  35. overlays.second.erase(overlay);
  36. }
  37. }
  38. }