mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-19 21:13:35 +00:00
[drape] Refactor UpdateVisualScale.
Signed-off-by: Viktor Govako <viktor.govako@gmail.com>
This commit is contained in:
committed by
Konstantin Pastbin
parent
2762bd50ae
commit
d1f817c3e6
@@ -640,51 +640,11 @@ void FrontendRenderer::AcceptMessage(ref_ptr<Message> message)
|
||||
break;
|
||||
}
|
||||
|
||||
case Message::Type::RecoverContextDependentResources:
|
||||
{
|
||||
UpdateContextDependentResources();
|
||||
break;
|
||||
}
|
||||
case Message::Type::RecoverContextDependentResources: UpdateContextDependentResources(); break;
|
||||
|
||||
case Message::Type::UpdateMapStyle:
|
||||
{
|
||||
#ifdef BUILD_DESIGNER
|
||||
classificator::Load();
|
||||
#endif // BUILD_DESIGNER
|
||||
case Message::Type::UpdateMapStyle: UpdateAll<SwitchMapStyleMessage>(); break;
|
||||
|
||||
// Clear all graphics.
|
||||
for (RenderLayer & layer : m_layers)
|
||||
{
|
||||
layer.m_renderGroups.clear();
|
||||
layer.m_isDirty = false;
|
||||
}
|
||||
|
||||
// Must be recreated on map style changing.
|
||||
CHECK(m_context != nullptr, ());
|
||||
m_transitBackground = make_unique_dp<ScreenQuadRenderer>(m_context);
|
||||
|
||||
// Invalidate read manager.
|
||||
{
|
||||
BaseBlockingMessage::Blocker blocker;
|
||||
m_commutator->PostMessage(ThreadsCommutator::ResourceUploadThread,
|
||||
make_unique_dp<InvalidateReadManagerRectMessage>(blocker), MessagePriority::Normal);
|
||||
blocker.Wait();
|
||||
}
|
||||
|
||||
// Delete all messages which can contain render states (and textures references inside).
|
||||
auto f = [this]() { InstantMessageFilter([](ref_ptr<Message> msg) { return msg->ContainsRenderState(); }); };
|
||||
|
||||
// Notify backend renderer and wait for completion.
|
||||
{
|
||||
BaseBlockingMessage::Blocker blocker;
|
||||
m_commutator->PostMessage(ThreadsCommutator::ResourceUploadThread,
|
||||
make_unique_dp<SwitchMapStyleMessage>(blocker, std::move(f)), MessagePriority::Normal);
|
||||
blocker.Wait();
|
||||
}
|
||||
|
||||
UpdateContextDependentResources();
|
||||
break;
|
||||
}
|
||||
case Message::Type::VisualScaleChanged: UpdateAll<VisualScaleChangedMessage>(); break;
|
||||
|
||||
case Message::Type::AllowAutoZoom:
|
||||
{
|
||||
@@ -1023,6 +983,46 @@ void FrontendRenderer::AcceptMessage(ref_ptr<Message> message)
|
||||
}
|
||||
}
|
||||
|
||||
template <class MessageT>
|
||||
void FrontendRenderer::UpdateAll()
|
||||
{
|
||||
#ifdef BUILD_DESIGNER
|
||||
classificator::Load();
|
||||
#endif // BUILD_DESIGNER
|
||||
|
||||
// Clear all graphics.
|
||||
for (RenderLayer & layer : m_layers)
|
||||
{
|
||||
layer.m_renderGroups.clear();
|
||||
layer.m_isDirty = false;
|
||||
}
|
||||
|
||||
// Must be recreated on map style changing.
|
||||
CHECK(m_context != nullptr, ());
|
||||
m_transitBackground = make_unique_dp<ScreenQuadRenderer>(m_context);
|
||||
|
||||
// Invalidate read manager.
|
||||
{
|
||||
BaseBlockingMessage::Blocker blocker;
|
||||
m_commutator->PostMessage(ThreadsCommutator::ResourceUploadThread,
|
||||
make_unique_dp<InvalidateReadManagerRectMessage>(blocker), MessagePriority::Normal);
|
||||
blocker.Wait();
|
||||
}
|
||||
|
||||
// Delete all messages which can contain render states (and textures references inside).
|
||||
auto f = [this]() { InstantMessageFilter([](ref_ptr<Message> msg) { return msg->ContainsRenderState(); }); };
|
||||
|
||||
// Notify backend renderer and wait for completion.
|
||||
{
|
||||
BaseBlockingMessage::Blocker blocker;
|
||||
m_commutator->PostMessage(ThreadsCommutator::ResourceUploadThread, make_unique_dp<MessageT>(blocker, std::move(f)),
|
||||
MessagePriority::Normal);
|
||||
blocker.Wait();
|
||||
}
|
||||
|
||||
UpdateContextDependentResources();
|
||||
}
|
||||
|
||||
std::unique_ptr<threads::IRoutine> FrontendRenderer::CreateRoutine()
|
||||
{
|
||||
return std::make_unique<Routine>(*this);
|
||||
|
||||
Reference in New Issue
Block a user