forked from organicmaps/organicmaps
Review fixes.
This commit is contained in:
parent
9bff202aa1
commit
5491341e58
4 changed files with 36 additions and 66 deletions
|
@ -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<dp::RenderBucket> && b)
|
||||
dp::SessionGuard guard(batcher, [this, &mwmId, &scheme](dp::GLState const & state, drape_ptr<dp::RenderBucket> && 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<dp::TextureManager> textures)
|
||||
|
@ -575,20 +572,13 @@ void TransitSchemeBuilder::GenerateStops(MwmSet::MwmId const & mwmId, ref_ptr<dp
|
|||
|
||||
auto const flusher = [this, &mwmId, &scheme](dp::GLState const & state, drape_ptr<dp::RenderBucket> && 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;
|
||||
|
|
|
@ -24,20 +24,18 @@ struct TransitRenderData
|
|||
uint32_t m_recacheId;
|
||||
MwmSet::MwmId m_mwmId;
|
||||
m2::PointD m_pivot;
|
||||
std::vector<drape_ptr<dp::RenderBucket>> m_buckets;
|
||||
drape_ptr<dp::RenderBucket> 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<dp::RenderBucket> && 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<TransitRenderData>;
|
||||
|
||||
struct LineParams
|
||||
{
|
||||
LineParams() = default;
|
||||
|
|
|
@ -35,8 +35,8 @@ void TransitSchemeRenderer::ClearGLDependentResources(ref_ptr<dp::OverlayTree> 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<dp::GpuProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
|
||||
TransitRenderData && renderData)
|
||||
{
|
||||
PrepareRenderData(mng, tree, m_renderData, renderData);
|
||||
PrepareRenderData(mng, tree, m_renderData, std::move(renderData));
|
||||
}
|
||||
|
||||
void TransitSchemeRenderer::AddMarkersRenderData(ref_ptr<dp::GpuProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
|
||||
TransitRenderData && renderData)
|
||||
{
|
||||
PrepareRenderData(mng, tree, m_markersRenderData, renderData);
|
||||
PrepareRenderData(mng, tree, m_markersRenderData, std::move(renderData));
|
||||
}
|
||||
|
||||
void TransitSchemeRenderer::AddTextRenderData(ref_ptr<dp::GpuProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
|
||||
TransitRenderData && renderData)
|
||||
{
|
||||
PrepareRenderData(mng, tree, m_textRenderData, renderData);
|
||||
PrepareRenderData(mng, tree, m_textRenderData, std::move(renderData));
|
||||
}
|
||||
|
||||
void TransitSchemeRenderer::AddStubsRenderData(ref_ptr<dp::GpuProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
|
||||
TransitRenderData && renderData)
|
||||
{
|
||||
PrepareRenderData(mng, tree, m_colorSymbolRenderData, renderData);
|
||||
PrepareRenderData(mng, tree, m_colorSymbolRenderData, std::move(renderData));
|
||||
}
|
||||
|
||||
void TransitSchemeRenderer::PrepareRenderData(ref_ptr<dp::GpuProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
|
||||
std::vector<TransitRenderData> & 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<dp::GpuProgramManager> 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<dp::GpuProgram> program = mng->GetProgram(rd.m_state.GetProgramIndex());
|
||||
ref_ptr<dp::GpuProgram> 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<dp::OverlayTree> 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<dp::OverlayTree> tree, std::vector<TransitRenderData> & renderData)
|
||||
void TransitSchemeRenderer::RemoveOverlays(ref_ptr<dp::OverlayTree> tree, std::vector<TransitRenderData> & 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<dp::GpuProgramManager> mng,
|
||||
|
@ -192,8 +181,7 @@ void TransitSchemeRenderer::RenderLines(ScreenBase const & screen, ref_ptr<dp::G
|
|||
uniforms.SetFloatValue("u_lineHalfWidth", pixelHalfWidth);
|
||||
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 */);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -216,8 +204,7 @@ void TransitSchemeRenderer::RenderMarkers(ScreenBase const & screen, ref_ptr<dp:
|
|||
pixelHalfWidth);
|
||||
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 */);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -240,18 +227,15 @@ void TransitSchemeRenderer::RenderText(ScreenBase const & screen, ref_ptr<dp::Gp
|
|||
uniforms.SetFloatValue("u_isOutlinePass", 1.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 */);
|
||||
|
||||
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_ptr<dp::G
|
|||
dp::ApplyUniforms(uniforms, program);
|
||||
|
||||
GLFunctions::glEnable(gl_const::GLDepthTest);
|
||||
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);
|
||||
}
|
||||
}
|
||||
} // namespace df
|
||||
|
|
|
@ -44,7 +44,7 @@ public:
|
|||
private:
|
||||
void PrepareRenderData(ref_ptr<dp::GpuProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
|
||||
std::vector<TransitRenderData> & currentRenderData,
|
||||
TransitRenderData & newRenderData);
|
||||
TransitRenderData && newRenderData);
|
||||
void ClearRenderData(MwmSet::MwmId const & mwmId, ref_ptr<dp::OverlayTree> tree,
|
||||
std::vector<TransitRenderData> & renderData);
|
||||
|
||||
|
@ -52,7 +52,7 @@ private:
|
|||
void ClearRenderData(TRemovePredicate const & predicate, ref_ptr<dp::OverlayTree> tree,
|
||||
std::vector<TransitRenderData> & renderData);
|
||||
|
||||
void RemoveOverlay(ref_ptr<dp::OverlayTree> tree, std::vector<TransitRenderData> & renderData);
|
||||
void RemoveOverlays(ref_ptr<dp::OverlayTree> tree, std::vector<TransitRenderData> & renderData);
|
||||
void CollectOverlays(ref_ptr<dp::OverlayTree> tree, ScreenBase const & modelView,
|
||||
std::vector<TransitRenderData> & renderData);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue