| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #include "BsRenderTargetManager.h"
- #include "BsRenderTarget.h"
- #include "BsRenderWindow.h"
- namespace BansheeEngine
- {
- RenderTargetManager::~RenderTargetManager()
- {
- assert(mRenderTargets.size() == 0 && "All render targets must be released before render target manager can be shut down.");
- }
- void RenderTargetManager::registerRenderTarget(RenderTarget* rt)
- {
- BS_LOCK_MUTEX(mMutex);
- RenderTargetData rtData;
- rtData.properties = rt->createProperties();
- rtData.dirty = true;
- mRenderTargets.insert(std::make_pair(rt, rtData));
- }
- void RenderTargetManager::unregisterRenderTarget(RenderTarget* rt)
- {
- BS_LOCK_MUTEX(mMutex);
- auto findIter = mRenderTargets.find(rt);
- if (findIter == mRenderTargets.end())
- return;
- RenderTargetData& rtData = findIter->second;
- bs_delete(rtData.properties);
- mRenderTargets.erase(findIter);
- }
- void RenderTargetManager::updateCore()
- {
- BS_LOCK_MUTEX(mMutex);
- for (auto& rtPair : mRenderTargets)
- {
- RenderTarget* rt = rtPair.first;
- RenderTargetData& rtData = rtPair.second;
- if (rt->getCore()->_isCoreDirty())
- {
- rtData.properties->copyFrom(rt->getCore()->getProperties());
- rtData.dirty = true;
- rt->getCore()->_markCoreClean();
- }
- }
- }
- void RenderTargetManager::update()
- {
- BS_LOCK_MUTEX(mMutex);
- for (auto& rtPair : mRenderTargets)
- {
- RenderTarget* rt = rtPair.first;
- RenderTargetData& rtData = rtPair.second;
- if (rtData.dirty)
- {
- rt->mProperties->copyFrom(*rtData.properties);
- rtData.dirty = false;
- }
- }
- }
- }
|