#include "StdAfx.h" #include "CRenderTargetManager.h" #include "../EterBase/Stl.h" #include CRenderTargetManager::CRenderTargetManager(){} CRenderTargetManager::~CRenderTargetManager() { Destroy(); } void CRenderTargetManager::Destroy() { m_renderTargets.clear(); } void CRenderTargetManager::DeformModels() { for (const auto& elem : m_renderTargets) elem.second->DeformModel(); } void CRenderTargetManager::UpdateModels() { for (auto& elem : m_renderTargets) elem.second->UpdateModel(); } // PORT: the background is drawn into the target by RenderModel (CRenderTarget::RenderBackground). void CRenderTargetManager::RenderBackgrounds() { } void CRenderTargetManager::RenderModels() { for (const auto& elem : m_renderTargets) elem.second->RenderModel(); } void CRenderTargetManager::CreateRenderTargetTextures() { for (const auto& elem : m_renderTargets) elem.second->CreateTextures(); } void CRenderTargetManager::ReleaseRenderTargetTextures() { for (const auto& elem : m_renderTargets) elem.second->ReleaseTextures(); } bool CRenderTargetManager::CreateRenderTarget(const int index, const int width, const int height) { // PORT: the size check guards the recording device, which allocates the target's bytes up front. if (index < 1 || GetRenderTarget(index) || width < 1 || height < 1 || width > 2048 || height > 2048) return false; try { m_renderTargets.emplace(index, std::make_shared(width, height)); } catch (const std::exception&) { return false; } return true; } void CRenderTargetManager::RemoveRenderTarget(const int index) { const auto it = m_renderTargets.find(index); if (it != m_renderTargets.end()) { it->second->ResetModel(); m_renderTargets.erase(index); } } std::shared_ptr CRenderTargetManager::GetRenderTarget(const int index) { const auto it = m_renderTargets.find(index); if (it != m_renderTargets.end()) return it->second; return nullptr; }