forked from organicmaps/organicmaps
Fixed setting up model-view matrix (now one time per frame)
This commit is contained in:
parent
2114318f22
commit
15cfc0df2d
6 changed files with 43 additions and 33 deletions
|
@ -2,11 +2,16 @@
|
|||
|
||||
#include "3party/fribidi/lib/fribidi.h"
|
||||
|
||||
#include "std/mutex.hpp"
|
||||
|
||||
namespace fribidi
|
||||
{
|
||||
|
||||
strings::UniString log2vis(strings::UniString const & str)
|
||||
{
|
||||
static mutex fribidiMutex;
|
||||
lock_guard<mutex> lock(fribidiMutex);
|
||||
|
||||
size_t const count = str.size();
|
||||
if (count == 0)
|
||||
return str;
|
||||
|
|
|
@ -68,9 +68,7 @@ void DrapeEngine::Resize(int w, int h)
|
|||
|
||||
void DrapeEngine::UpdateCoverage(ScreenBase const & screen)
|
||||
{
|
||||
m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread,
|
||||
dp::MovePointer<Message>(new UpdateModelViewMessage(screen)),
|
||||
MessagePriority::Normal);
|
||||
m_frontend->UpdateModelView(screen);
|
||||
}
|
||||
|
||||
void DrapeEngine::ClearUserMarksLayer(df::TileKey const & tileKey)
|
||||
|
|
|
@ -40,6 +40,7 @@ FrontendRenderer::FrontendRenderer(dp::RefPointer<ThreadsCommutator> commutator,
|
|||
, m_textureManager(textureManager)
|
||||
, m_gpuProgramManager(new dp::GpuProgramManager())
|
||||
, m_viewport(viewport)
|
||||
, m_modelViewChanged(false)
|
||||
{
|
||||
#ifdef DRAW_INFO
|
||||
m_tpf = 0,0;
|
||||
|
@ -159,18 +160,6 @@ void FrontendRenderer::AcceptMessage(dp::RefPointer<Message> message)
|
|||
break;
|
||||
}
|
||||
|
||||
case Message::UpdateModelView:
|
||||
{
|
||||
UpdateModelViewMessage * coverMessage = df::CastMessage<UpdateModelViewMessage>(message);
|
||||
m_view = coverMessage->GetScreen();
|
||||
RefreshModelView();
|
||||
ResolveTileKeys();
|
||||
m_commutator->PostMessage(ThreadsCommutator::ResourceUploadThread,
|
||||
dp::MovePointer<Message>(new UpdateReadManagerMessage(m_view, m_tiles)),
|
||||
MessagePriority::Normal);
|
||||
break;
|
||||
}
|
||||
|
||||
case Message::InvalidateRect:
|
||||
{
|
||||
InvalidateRectMessage * m = df::CastMessage<InvalidateRectMessage>(message);
|
||||
|
@ -431,6 +420,7 @@ void FrontendRenderer::Routine::Do()
|
|||
context->setDefaultFramebuffer();
|
||||
m_renderer.m_textureManager->UpdateDynamicTextures();
|
||||
m_renderer.RenderScene();
|
||||
m_renderer.ProcessModelViewUpdating();
|
||||
|
||||
double availableTime = VSyncInterval - (timer.ElapsedSeconds() /*+ avarageMessageTime*/);
|
||||
|
||||
|
@ -467,4 +457,26 @@ void FrontendRenderer::DeleteRenderData()
|
|||
DeleteRange(m_userMarkRenderGroups, DeleteFunctor());
|
||||
}
|
||||
|
||||
void FrontendRenderer::UpdateModelView(ScreenBase const & screen)
|
||||
{
|
||||
lock_guard<mutex> lock(m_modelViewMutex);
|
||||
m_modelViewChanged = true;
|
||||
m_newView = screen;
|
||||
}
|
||||
|
||||
void FrontendRenderer::ProcessModelViewUpdating()
|
||||
{
|
||||
if (m_modelViewChanged)
|
||||
{
|
||||
lock_guard<mutex> lock(m_modelViewMutex);
|
||||
m_view = m_newView;
|
||||
RefreshModelView();
|
||||
ResolveTileKeys();
|
||||
m_commutator->PostMessage(ThreadsCommutator::ResourceUploadThread,
|
||||
dp::MovePointer<Message>(new UpdateReadManagerMessage(m_view, m_tiles)),
|
||||
MessagePriority::Normal);
|
||||
m_modelViewChanged = false;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace df
|
||||
|
|
|
@ -55,6 +55,8 @@ public:
|
|||
void AfterDrawFrame();
|
||||
#endif
|
||||
|
||||
void UpdateModelView(ScreenBase const & screen);
|
||||
|
||||
protected:
|
||||
virtual void AcceptMessage(dp::RefPointer<Message> message);
|
||||
|
||||
|
@ -90,6 +92,7 @@ private:
|
|||
|
||||
private:
|
||||
void DeleteRenderData();
|
||||
void ProcessModelViewUpdating();
|
||||
|
||||
private:
|
||||
dp::RefPointer<dp::TextureManager> m_textureManager;
|
||||
|
@ -107,6 +110,10 @@ private:
|
|||
ScreenBase m_view;
|
||||
set<TileKey> m_tiles;
|
||||
|
||||
ScreenBase m_newView;
|
||||
mutex m_modelViewMutex;
|
||||
bool m_modelViewChanged;
|
||||
|
||||
dp::OverlayTree m_overlayTree;
|
||||
};
|
||||
|
||||
|
|
|
@ -13,7 +13,6 @@ public:
|
|||
TileReadEnded,
|
||||
FlushTile,
|
||||
MapShapeReaded,
|
||||
UpdateModelView,
|
||||
UpdateReadManager,
|
||||
InvalidateRect,
|
||||
InvalidateReadManagerRect,
|
||||
|
|
|
@ -89,20 +89,6 @@ private:
|
|||
Viewport m_viewport;
|
||||
};
|
||||
|
||||
class UpdateModelViewMessage : public Message
|
||||
{
|
||||
public:
|
||||
UpdateModelViewMessage(ScreenBase const & screen)
|
||||
: m_screen(screen) {}
|
||||
|
||||
Type GetType() const override { return Message::UpdateModelView; }
|
||||
|
||||
ScreenBase const & GetScreen() const { return m_screen; }
|
||||
|
||||
private:
|
||||
ScreenBase m_screen;
|
||||
};
|
||||
|
||||
class InvalidateRectMessage : public Message
|
||||
{
|
||||
public:
|
||||
|
@ -117,19 +103,22 @@ private:
|
|||
m2::RectD m_rect;
|
||||
};
|
||||
|
||||
class UpdateReadManagerMessage : public UpdateModelViewMessage
|
||||
class UpdateReadManagerMessage : public Message
|
||||
{
|
||||
public:
|
||||
UpdateReadManagerMessage(ScreenBase const & screen, set<TileKey> const & tiles)
|
||||
: UpdateModelViewMessage(screen)
|
||||
, m_tiles(tiles) {}
|
||||
: m_screen(screen)
|
||||
, m_tiles(tiles)
|
||||
{}
|
||||
|
||||
Type GetType() const override { return Message::UpdateReadManager; }
|
||||
|
||||
set<TileKey> const & GetTiles() const { return m_tiles; }
|
||||
ScreenBase const & GetScreen() const { return m_screen; }
|
||||
|
||||
private:
|
||||
set<TileKey> m_tiles;
|
||||
ScreenBase m_screen;
|
||||
};
|
||||
|
||||
class InvalidateReadManagerRectMessage : public Message
|
||||
|
|
Loading…
Add table
Reference in a new issue