From 5491341e5836e163d987c855783c71d2d85b5ec8 Mon Sep 17 00:00:00 2001 From: Daria Volvenkova Date: Thu, 21 Jun 2018 16:31:34 +0300 Subject: [PATCH] Review fixes. --- drape_frontend/transit_scheme_builder.cpp | 20 ++----- drape_frontend/transit_scheme_builder.hpp | 10 ++-- drape_frontend/transit_scheme_renderer.cpp | 68 ++++++++-------------- drape_frontend/transit_scheme_renderer.hpp | 4 +- 4 files changed, 36 insertions(+), 66 deletions(-) diff --git a/drape_frontend/transit_scheme_builder.cpp b/drape_frontend/transit_scheme_builder.cpp index db776447b9..efe8202427 100644 --- a/drape_frontend/transit_scheme_builder.cpp +++ b/drape_frontend/transit_scheme_builder.cpp @@ -256,7 +256,7 @@ bool FindLongerPath(routing::transit::StopId stop1Id, routing::transit::StopId s if (stop1Ind < sameStops.size() || stop2Ind < sameStops.size()) { if (stop1Ind > stop2Ind) - swap(stop1Ind, stop2Ind); + std::swap(stop1Ind, stop2Ind); if (stop1Ind < sameStops.size() && stop2Ind < sameStops.size() && stop2Ind - stop1Ind > 1) return true; @@ -523,15 +523,13 @@ void TransitSchemeBuilder::GenerateShapes(MwmSet::MwmId const & mwmId) { MwmSchemeData const & scheme = m_schemes[mwmId]; - auto const state = CreateGLState(gpu::TRANSIT_PROGRAM, RenderState::TransitSchemeLayer); - TransitRenderData renderData(state, m_recacheId, mwmId, scheme.m_pivot); - uint32_t const kBatchSize = 5000; dp::Batcher batcher(kBatchSize, kBatchSize); { - dp::SessionGuard guard(batcher, [&renderData](dp::GLState const & state, drape_ptr && b) + dp::SessionGuard guard(batcher, [this, &mwmId, &scheme](dp::GLState const & state, drape_ptr && b) { - renderData.m_buckets.push_back(std::move(b)); + TransitRenderData renderData(state, m_recacheId, mwmId, scheme.m_pivot, std::move(b)); + m_flushRenderDataFn(std::move(renderData)); }); for (auto const & shape : scheme.m_shapes) @@ -566,7 +564,6 @@ void TransitSchemeBuilder::GenerateShapes(MwmSet::MwmId const & mwmId) } } } - m_flushRenderDataFn(std::move(renderData)); } void TransitSchemeBuilder::GenerateStops(MwmSet::MwmId const & mwmId, ref_ptr textures) @@ -575,20 +572,13 @@ void TransitSchemeBuilder::GenerateStops(MwmSet::MwmId const & mwmId, ref_ptr && b) { - TransitRenderData renderData(state, m_recacheId, mwmId, scheme.m_pivot); - renderData.m_buckets.emplace_back(std::move(b)); + TransitRenderData renderData(state, m_recacheId, mwmId, scheme.m_pivot, std::move(b)); if (state.GetProgramIndex() == gpu::TRANSIT_MARKER_PROGRAM) - { m_flushMarkersRenderDataFn(std::move(renderData)); - } else if (state.GetProgramIndex() == gpu::TEXT_OUTLINED_PROGRAM) - { m_flushTextRenderDataFn(std::move(renderData)); - } else - { m_flushStubsRenderDataFn(std::move(renderData)); - } }; uint32_t const kBatchSize = 5000; diff --git a/drape_frontend/transit_scheme_builder.hpp b/drape_frontend/transit_scheme_builder.hpp index 41c48eedd7..5c457e909a 100644 --- a/drape_frontend/transit_scheme_builder.hpp +++ b/drape_frontend/transit_scheme_builder.hpp @@ -24,20 +24,18 @@ struct TransitRenderData uint32_t m_recacheId; MwmSet::MwmId m_mwmId; m2::PointD m_pivot; - std::vector> m_buckets; + drape_ptr m_bucket; - TransitRenderData(dp::GLState const & state, uint32_t recacheId, MwmSet::MwmId const & mwmId, m2::PointD const pivot) + TransitRenderData(dp::GLState const & state, uint32_t recacheId, MwmSet::MwmId const & mwmId, m2::PointD const pivot, + drape_ptr && bucket) : m_state(state) , m_recacheId(recacheId) , m_mwmId(mwmId) , m_pivot(pivot) + , m_bucket(std::move(bucket)) {} - TransitRenderData(TransitRenderData &&) = default; - TransitRenderData & operator=(TransitRenderData &&) = default; }; -using TTransitRenderData = std::vector; - struct LineParams { LineParams() = default; diff --git a/drape_frontend/transit_scheme_renderer.cpp b/drape_frontend/transit_scheme_renderer.cpp index 412bd349d6..88f80c539a 100644 --- a/drape_frontend/transit_scheme_renderer.cpp +++ b/drape_frontend/transit_scheme_renderer.cpp @@ -35,8 +35,8 @@ void TransitSchemeRenderer::ClearGLDependentResources(ref_ptr t { if (tree) { - RemoveOverlay(tree, m_textRenderData); - RemoveOverlay(tree, m_colorSymbolRenderData); + RemoveOverlays(tree, m_textRenderData); + RemoveOverlays(tree, m_colorSymbolRenderData); } m_renderData.clear(); @@ -68,10 +68,7 @@ void TransitSchemeRenderer::ClearRenderData(TRemovePredicate const & predicate, for (auto & data : renderData) { if (predicate(data)) - { - for (auto const & bucket : data.m_buckets) - bucket->RemoveOverlayHandles(tree); - } + data.m_bucket->RemoveOverlayHandles(tree); } } @@ -82,30 +79,30 @@ void TransitSchemeRenderer::ClearRenderData(TRemovePredicate const & predicate, void TransitSchemeRenderer::AddRenderData(ref_ptr mng, ref_ptr tree, TransitRenderData && renderData) { - PrepareRenderData(mng, tree, m_renderData, renderData); + PrepareRenderData(mng, tree, m_renderData, std::move(renderData)); } void TransitSchemeRenderer::AddMarkersRenderData(ref_ptr mng, ref_ptr tree, TransitRenderData && renderData) { - PrepareRenderData(mng, tree, m_markersRenderData, renderData); + PrepareRenderData(mng, tree, m_markersRenderData, std::move(renderData)); } void TransitSchemeRenderer::AddTextRenderData(ref_ptr mng, ref_ptr tree, TransitRenderData && renderData) { - PrepareRenderData(mng, tree, m_textRenderData, renderData); + PrepareRenderData(mng, tree, m_textRenderData, std::move(renderData)); } void TransitSchemeRenderer::AddStubsRenderData(ref_ptr mng, ref_ptr tree, TransitRenderData && renderData) { - PrepareRenderData(mng, tree, m_colorSymbolRenderData, renderData); + PrepareRenderData(mng, tree, m_colorSymbolRenderData, std::move(renderData)); } void TransitSchemeRenderer::PrepareRenderData(ref_ptr mng, ref_ptr tree, std::vector & currentRenderData, - TransitRenderData & newRenderData) + TransitRenderData && newRenderData) { // Remove obsolete render data. auto const removePredicate = [this, &newRenderData](TransitRenderData const & rd) @@ -117,13 +114,11 @@ void TransitSchemeRenderer::PrepareRenderData(ref_ptr mng m_lastRecacheId = max(m_lastRecacheId, newRenderData.m_recacheId); // Add new render data. - currentRenderData.emplace_back(std::move(newRenderData)); - TransitRenderData & rd = currentRenderData.back(); - - ref_ptr program = mng->GetProgram(rd.m_state.GetProgramIndex()); + ref_ptr program = mng->GetProgram(newRenderData.m_state.GetProgramIndex()); program->Bind(); - for (auto const & bucket : rd.m_buckets) - bucket->GetBuffer()->Build(program); + newRenderData.m_bucket->GetBuffer()->Build(program); + + currentRenderData.emplace_back(std::move(newRenderData)); } void TransitSchemeRenderer::RenderTransit(ScreenBase const & screen, int zoomLevel, @@ -156,23 +151,17 @@ void TransitSchemeRenderer::CollectOverlays(ref_ptr tree, Scree { for (auto & data : renderData) { - for (auto const & bucket : data.m_buckets) - { - if (tree->IsNeedUpdate()) - bucket->CollectOverlayHandles(tree); - else - bucket->Update(modelView); - } + if (tree->IsNeedUpdate()) + data.m_bucket->CollectOverlayHandles(tree); + else + data.m_bucket->Update(modelView); } } -void TransitSchemeRenderer::RemoveOverlay(ref_ptr tree, std::vector & renderData) +void TransitSchemeRenderer::RemoveOverlays(ref_ptr tree, std::vector & renderData) { for (auto & data : renderData) - { - for (auto const & bucket : data.m_buckets) - bucket->RemoveOverlayHandles(tree); - } + data.m_bucket->RemoveOverlayHandles(tree); } void TransitSchemeRenderer::RenderLines(ScreenBase const & screen, ref_ptr mng, @@ -192,8 +181,7 @@ void TransitSchemeRenderer::RenderLines(ScreenBase const & screen, ref_ptrRender(false /* draw as line */); + renderData.m_bucket->Render(false /* draw as line */); } } @@ -216,8 +204,7 @@ void TransitSchemeRenderer::RenderMarkers(ScreenBase const & screen, ref_ptrRender(false /* draw as line */); + renderData.m_bucket->Render(false /* draw as line */); } } @@ -240,18 +227,15 @@ void TransitSchemeRenderer::RenderText(ScreenBase const & screen, ref_ptrRender(false /* draw as line */); + renderData.m_bucket->Render(false /* draw as line */); uniforms.SetFloatValue("u_contrastGamma", params.m_contrast, params.m_gamma); uniforms.SetFloatValue("u_isOutlinePass", 0.0f); dp::ApplyUniforms(uniforms, program); - for (auto const & bucket : renderData.m_buckets) - bucket->Render(false /* draw as line */); + renderData.m_bucket->Render(false /* draw as line */); - for (auto const & bucket : renderData.m_buckets) - bucket->RenderDebug(screen); + renderData.m_bucket->RenderDebug(screen); } } @@ -271,11 +255,9 @@ void TransitSchemeRenderer::RenderStubs(ScreenBase const & screen, ref_ptrRender(false /* draw as line */); + renderData.m_bucket->Render(false /* draw as line */); - for (auto const & bucket : renderData.m_buckets) - bucket->RenderDebug(screen); + renderData.m_bucket->RenderDebug(screen); } } } // namespace df diff --git a/drape_frontend/transit_scheme_renderer.hpp b/drape_frontend/transit_scheme_renderer.hpp index 9ac98b1439..345427b02e 100644 --- a/drape_frontend/transit_scheme_renderer.hpp +++ b/drape_frontend/transit_scheme_renderer.hpp @@ -44,7 +44,7 @@ public: private: void PrepareRenderData(ref_ptr mng, ref_ptr tree, std::vector & currentRenderData, - TransitRenderData & newRenderData); + TransitRenderData && newRenderData); void ClearRenderData(MwmSet::MwmId const & mwmId, ref_ptr tree, std::vector & renderData); @@ -52,7 +52,7 @@ private: void ClearRenderData(TRemovePredicate const & predicate, ref_ptr tree, std::vector & renderData); - void RemoveOverlay(ref_ptr tree, std::vector & renderData); + void RemoveOverlays(ref_ptr tree, std::vector & renderData); void CollectOverlays(ref_ptr tree, ScreenBase const & modelView, std::vector & renderData);