BsRenderTargetManager.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #include "BsRenderTargetManager.h"
  2. #include "BsRenderTarget.h"
  3. namespace BansheeEngine
  4. {
  5. RenderTargetManager::~RenderTargetManager()
  6. {
  7. assert(mRenderTargets.size() == 0 && "All render targets must be released before render target manager can be shut down.");
  8. }
  9. void RenderTargetManager::registerRenderTarget(RenderTarget* rt)
  10. {
  11. BS_LOCK_MUTEX(mMutex);
  12. RenderTargetData rtData;
  13. rtData.properties = rt->createProperties();
  14. rtData.dirty = true;
  15. mRenderTargets.insert(std::make_pair(rt, rtData));
  16. }
  17. void RenderTargetManager::unregisterRenderTarget(RenderTarget* rt)
  18. {
  19. BS_LOCK_MUTEX(mMutex);
  20. auto findIter = mRenderTargets.find(rt);
  21. if (findIter == mRenderTargets.end())
  22. return;
  23. RenderTargetData& rtData = findIter->second;
  24. bs_delete(rtData.properties);
  25. mRenderTargets.erase(findIter);
  26. }
  27. void RenderTargetManager::updateCore()
  28. {
  29. BS_LOCK_MUTEX(mMutex);
  30. for (auto& rtPair : mRenderTargets)
  31. {
  32. RenderTarget* rt = rtPair.first;
  33. RenderTargetData& rtData = rtPair.second;
  34. if (rt->getCore()->_isCoreDirty())
  35. {
  36. *rtData.properties = rt->getCore()->getProperties();
  37. rtData.dirty = true;
  38. rt->getCore()->_markCoreClean();
  39. }
  40. }
  41. }
  42. void RenderTargetManager::update()
  43. {
  44. BS_LOCK_MUTEX(mMutex);
  45. for (auto& rtPair : mRenderTargets)
  46. {
  47. RenderTarget* rt = rtPair.first;
  48. RenderTargetData& rtData = rtPair.second;
  49. if (rtData.dirty)
  50. {
  51. *rt->mProperties = *rtData.properties;
  52. rtData.dirty = false;
  53. }
  54. }
  55. }
  56. }