#include "drape_engine.hpp" #include "message_subclasses.hpp" #include "visual_params.hpp" #include "../drape/texture_manager.hpp" #include "../std/bind.hpp" namespace df { DrapeEngine::DrapeEngine(dp::RefPointer contextfactory, Viewport const & viewport, MapDataProvider const & model) : m_viewport(viewport) { GLFunctions::Init(); VisualParams::Init(viewport.GetPixelRatio(), df::CalculateTileSize(m_viewport.GetWidth(), m_viewport.GetHeight())); m_textures.Reset(new dp::TextureManager()); dp::RefPointer textureHolder = m_textures.GetRefPointer(); dp::TextureSetBinder * binder = new dp::TextureSetBinder(m_textures.GetRefPointer()); m_threadCommutator = dp::MasterPointer(new ThreadsCommutator()); dp::RefPointer commutatorRef = m_threadCommutator.GetRefPointer(); m_frontend = dp::MasterPointer(new FrontendRenderer(commutatorRef, contextfactory, dp::MovePointer(binder), m_viewport)); m_backend = dp::MasterPointer(new BackendRenderer(commutatorRef, contextfactory, textureHolder, model)); } DrapeEngine::~DrapeEngine() { m_frontend.Destroy(); m_backend.Destroy(); m_textures.Destroy(); m_threadCommutator.Destroy(); } void DrapeEngine::Resize(int w, int h) { if (m_viewport.GetLogicWidth() == w && m_viewport.GetLogicHeight() == h) return; m_viewport.SetViewport(0, 0, w, h); m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, dp::MovePointer(new ResizeMessage(m_viewport))); } void DrapeEngine::UpdateCoverage(ScreenBase const & screen) { m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, dp::MovePointer(new UpdateModelViewMessage(screen))); } } // namespace df