BsQueryManager.cpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include "BsQueryManager.h"
  2. #include "BsEventQuery.h"
  3. #include "BsTimerQuery.h"
  4. #include "BsOcclusionQuery.h"
  5. namespace BansheeEngine
  6. {
  7. QueryManager::QueryManager()
  8. {
  9. }
  10. QueryManager::~QueryManager()
  11. {
  12. // Trigger all remaining queries, whether they completed or not
  13. for (auto& query : mEventQueries)
  14. {
  15. if (query->isActive())
  16. query->onTriggered();
  17. }
  18. for (auto& query : mTimerQueries)
  19. {
  20. if (query->isActive())
  21. query->onTriggered(query->getTimeMs());
  22. }
  23. for (auto& query : mOcclusionQueries)
  24. {
  25. if (query->isActive())
  26. query->onComplete(query->getNumSamples());
  27. }
  28. }
  29. void QueryManager::_update()
  30. {
  31. for(auto& query : mEventQueries)
  32. {
  33. if(query->isActive() && query->isReady())
  34. {
  35. query->onTriggered();
  36. query->setActive(false);
  37. }
  38. }
  39. for(auto& query : mTimerQueries)
  40. {
  41. if(query->isActive() && query->isReady())
  42. {
  43. query->onTriggered(query->getTimeMs());
  44. query->setActive(false);
  45. }
  46. }
  47. for (auto& query : mOcclusionQueries)
  48. {
  49. if (query->isActive() && query->isReady())
  50. {
  51. query->onComplete(query->getNumSamples());
  52. query->setActive(false);
  53. }
  54. }
  55. }
  56. void QueryManager::deleteEventQuery(EventQuery* query)
  57. {
  58. auto iterFind = std::find(instance().mEventQueries.begin(), instance().mEventQueries.end(), query);
  59. if(iterFind != instance().mEventQueries.end())
  60. instance().mEventQueries.erase(iterFind);
  61. bs_delete(query);
  62. }
  63. void QueryManager::deleteTimerQuery(TimerQuery* query)
  64. {
  65. auto iterFind = std::find(instance().mTimerQueries.begin(), instance().mTimerQueries.end(), query);
  66. if(iterFind != instance().mTimerQueries.end())
  67. instance().mTimerQueries.erase(iterFind);
  68. bs_delete(query);
  69. }
  70. void QueryManager::deleteOcclusionQuery(OcclusionQuery* query)
  71. {
  72. auto iterFind = std::find(instance().mOcclusionQueries.begin(), instance().mOcclusionQueries.end(), query);
  73. if (iterFind != instance().mOcclusionQueries.end())
  74. instance().mOcclusionQueries.erase(iterFind);
  75. bs_delete(query);
  76. }
  77. }