Welcome to mirror list, hosted at ThFree Co, Russian Federation.

drape_engine.cpp « drape_frontend - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 16530693f713eb6c025b5c0e38515a6724ec7984 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#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<dp::OGLContextFactory> 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<dp::TextureSetHolder> textureHolder = m_textures.GetRefPointer();
  dp::TextureSetBinder * binder = new dp::TextureSetBinder(m_textures.GetRefPointer());

  m_threadCommutator = dp::MasterPointer<ThreadsCommutator>(new ThreadsCommutator());
  dp::RefPointer<ThreadsCommutator> commutatorRef = m_threadCommutator.GetRefPointer();

  m_frontend = dp::MasterPointer<FrontendRenderer>(new FrontendRenderer(commutatorRef,
                                                                        contextfactory,
                                                                        dp::MovePointer<dp::TextureSetController>(binder),
                                                                        m_viewport));
  m_backend =  dp::MasterPointer<BackendRenderer>(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<Message>(new ResizeMessage(m_viewport)));
}

void DrapeEngine::UpdateCoverage(ScreenBase const & screen)
{
  m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread,
                                  dp::MovePointer<Message>(new UpdateModelViewMessage(screen)));
}

} // namespace df