From 2ae492f3a7d11ea1bac20b293a802ee6c9939f97 Mon Sep 17 00:00:00 2001 From: rachytski Date: Mon, 29 Aug 2011 13:43:47 +0300 Subject: [PATCH] passing separate clipRect parameter into DrawModel function. closes #315 --- map/benchmark_framework.cpp | 4 ++-- map/framework.cpp | 7 ++++--- map/framework.hpp | 1 + map/render_policy.hpp | 2 +- map/render_policy_st.cpp | 3 ++- map/tile_renderer.cpp | 10 ++++++---- map/tiling_render_policy_st.cpp | 9 ++++++--- 7 files changed, 22 insertions(+), 14 deletions(-) diff --git a/map/benchmark_framework.cpp b/map/benchmark_framework.cpp index e11d91e16a..8e01d14519 100644 --- a/map/benchmark_framework.cpp +++ b/map/benchmark_framework.cpp @@ -144,9 +144,9 @@ BenchmarkFramework::BenchmarkFramework(shared_ptr const & Settings::Get("IsBenchmarkingMT", isBenchmarkingMT); if (isBenchmarkingMT) - base_type::SetRenderPolicy(make_shared_ptr(new BenchmarkTilingRenderPolicyMT(wh, bind(&base_type::DrawModel, this, _1, _2, _3, _4)))); + base_type::SetRenderPolicy(make_shared_ptr(new BenchmarkTilingRenderPolicyMT(wh, bind(&base_type::DrawModel, this, _1, _2, _3, _4, _5)))); else - base_type::SetRenderPolicy(make_shared_ptr(new RenderPolicyST(wh, bind(&base_type::DrawModel, this, _1, _2, _3, _4)))); + base_type::SetRenderPolicy(make_shared_ptr(new RenderPolicyST(wh, bind(&base_type::DrawModel, this, _1, _2, _3, _4, _5)))); m_startTime = my::FormatCurrentTime(); diff --git a/map/framework.cpp b/map/framework.cpp index 5e5e0ca515..e342e86a5d 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -85,8 +85,8 @@ Framework::Framework(shared_ptr windowHandle, { // on Android policy is created in AndroidFramework #ifndef OMIM_OS_ANDROID -// SetRenderPolicy(make_shared_ptr(new RenderPolicyST(windowHandle, bind(&this_type::DrawModel, this, _1, _2, _3, _4)))); - SetRenderPolicy(make_shared_ptr(new TilingRenderPolicyMT(windowHandle, bind(&this_type::DrawModel, this, _1, _2, _3, _4)))); +// SetRenderPolicy(make_shared_ptr(new RenderPolicyST(windowHandle, bind(&this_type::DrawModel, this, _1, _2, _3, _4, _5)))); + SetRenderPolicy(make_shared_ptr(new TilingRenderPolicyMT(windowHandle, bind(&this_type::DrawModel, this, _1, _2, _3, _4, _5)))); #endif m_informationDisplay.setBottomShift(bottomShift); #ifdef DRAW_TOUCH_POINTS @@ -290,9 +290,10 @@ template void Framework::DrawModel(shared_ptr const & e, ScreenBase const & screen, m2::RectD const & selectRect, + m2::RectD const & clipRect, int scaleLevel) { - fwork::DrawProcessor doDraw(selectRect, screen, e, scaleLevel); + fwork::DrawProcessor doDraw(clipRect, screen, e, scaleLevel); try { diff --git a/map/framework.hpp b/map/framework.hpp index 1ffce84ee5..2ec5cc118d 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -184,6 +184,7 @@ public: void DrawModel(shared_ptr const & e, ScreenBase const & screen, m2::RectD const & selectRect, + m2::RectD const & clipRect, int scaleLevel); void Search(string const & text, SearchCallbackT callback); diff --git a/map/render_policy.hpp b/map/render_policy.hpp index 930120fe61..b2fca30f88 100644 --- a/map/render_policy.hpp +++ b/map/render_policy.hpp @@ -26,7 +26,7 @@ class RenderPolicy { public: - typedef function, ScreenBase const &, m2::RectD const &, int)> TRenderFn; + typedef function, ScreenBase const &, m2::RectD const &, m2::RectD const &, int)> TRenderFn; private: diff --git a/map/render_policy_st.cpp b/map/render_policy_st.cpp index 7734d2d4b8..9d3448deea 100644 --- a/map/render_policy_st.cpp +++ b/map/render_policy_st.cpp @@ -37,7 +37,8 @@ void RenderPolicyST::DrawFrame(shared_ptr const & e, e->drawer()->screen()->setInfoLayer(infoLayer); e->drawer()->screen()->clear(bgColor()); - renderFn()(e, s, s.GlobalRect(), scales::GetScaleLevel(glbRect)); + + renderFn()(e, s, s.GlobalRect(), s.GlobalRect(), scales::GetScaleLevel(glbRect)); infoLayer->draw(e->drawer()->screen().get(), math::Identity()); e->drawer()->screen()->resetInfoLayer(); diff --git a/map/tile_renderer.cpp b/map/tile_renderer.cpp index 459139f7d1..4a69ee365f 100644 --- a/map/tile_renderer.cpp +++ b/map/tile_renderer.cpp @@ -145,16 +145,18 @@ void TileRenderer::DrawTile(core::CommandsQueue::Environment const & env, */ frameScreen.SetFromRect(rectInfo.m_rect); - m2::RectD selectionRect; + m2::RectD selectRect; + m2::RectD clipRect; double const inflationSize = 24 * drawer->VisualScale(); - //frameScreen.PtoG(m2::Inflate(m2::RectD(renderRect), inflationSize, inflationSize), selectionRect); - frameScreen.PtoG(m2::RectD(renderRect), selectionRect); + frameScreen.PtoG(m2::Inflate(m2::RectD(renderRect), inflationSize, inflationSize), clipRect); + frameScreen.PtoG(m2::RectD(renderRect), selectRect); m_renderFn( paintEvent, frameScreen, - selectionRect, + selectRect, + clipRect, rectInfo.m_drawScale ); diff --git a/map/tiling_render_policy_st.cpp b/map/tiling_render_policy_st.cpp index e0f8c8158d..510b6643ab 100644 --- a/map/tiling_render_policy_st.cpp +++ b/map/tiling_render_policy_st.cpp @@ -113,15 +113,18 @@ void TilingRenderPolicyST::DrawFrame(shared_ptr const & e, ScreenBas m_tileScreen.SetFromRect(ri.m_rect); - m2::RectD selectionRect; + m2::RectD selectRect; + m2::RectD clipRect; double inflationSize = 24 * GetPlatform().VisualScale(); - m_tileScreen.PtoG(m2::Inflate(m2::RectD(renderRect), inflationSize, inflationSize), selectionRect); + m_tileScreen.PtoG(m2::RectD(renderRect), selectRect); + m_tileScreen.PtoG(m2::Inflate(m2::RectD(renderRect), inflationSize, inflationSize), clipRect); renderFn()(paintEvent, m_tileScreen, - selectionRect, + selectRect, + clipRect, ri.m_drawScale); m_tileDrawer->endFrame();