Render user lines in separate layer above 2d geometry.

This commit is contained in:
Daria Volvenkova 2017-07-05 15:39:02 +03:00 committed by r.kuznetsov
parent 2a38919e49
commit cae0912c0a
5 changed files with 24 additions and 6 deletions

View file

@ -38,6 +38,7 @@ public:
{
/// Do not change order
GeometryLayer,
UserLineLayer,
OverlayLayer,
UserMarkLayer,
NavigationLayer,

View file

@ -1136,6 +1136,7 @@ void FrontendRenderer::RenderScene(ScreenBase const & modelView)
GLFunctions::glClear(gl_const::GLColorBit | gl_const::GLDepthBit | gl_const::GLStencilBit);
Render2dLayer(modelView);
RenderUserLinesLayer(modelView);
if (m_buildingsFramebuffer->IsSupported())
{
@ -1293,6 +1294,15 @@ void FrontendRenderer::RenderUserMarksLayer(ScreenBase const & modelView)
GLFunctions::glDisable(gl_const::GLDepthTest);
}
void FrontendRenderer::RenderUserLinesLayer(ScreenBase const & modelView)
{
GLFunctions::glClear(gl_const::GLDepthBit);
GLFunctions::glEnable(gl_const::GLDepthTest);
RenderLayer & userLines = m_layers[RenderLayer::UserLineID];
for (drape_ptr<RenderGroup> & group : userLines.m_renderGroups)
RenderSingleGroup(modelView, make_ref(group));
}
void FrontendRenderer::BuildOverlayTree(ScreenBase const & modelView)
{
static std::vector<RenderLayer::RenderLayerID> layers = {RenderLayer::OverlayID,
@ -2032,9 +2042,11 @@ FrontendRenderer::RenderLayer::RenderLayerID FrontendRenderer::RenderLayer::GetL
{
if (state.GetDepthLayer() == dp::GLState::OverlayLayer)
return OverlayID;
else if (state.GetDepthLayer() == dp::GLState::UserMarkLayer)
if (state.GetDepthLayer() == dp::GLState::UserMarkLayer)
return UserMarkID;
else if (state.GetDepthLayer() == dp::GLState::NavigationLayer)
if (state.GetDepthLayer() == dp::GLState::UserLineLayer)
return UserLineID;
if (state.GetDepthLayer() == dp::GLState::NavigationLayer)
return NavigationID;
if (state.GetProgram3dIndex() == gpu::AREA_3D_PROGRAM ||

View file

@ -151,6 +151,7 @@ private:
void RenderOverlayLayer(ScreenBase const & modelView);
void RenderNavigationOverlayLayer(ScreenBase const & modelView);
void RenderUserMarksLayer(ScreenBase const & modelView);
void RenderUserLinesLayer(ScreenBase const & modelView);
void RenderTrafficAndRouteLayer(ScreenBase const & modelView);
ScreenBase const & ProcessEvents(bool & modelViewChanged, bool & viewportChanged);
@ -239,6 +240,7 @@ private:
enum RenderLayerID
{
Geometry2dID,
UserLineID,
OverlayID,
Geometry3dID,
UserMarkID,

View file

@ -60,6 +60,7 @@ struct BaseBuilderParams
dp::TextureManager::ColorRegion m_color;
float m_pxHalfWidth;
float m_depth;
dp::GLState::DepthLayer m_depthLayer;
dp::LineCap m_cap;
dp::LineJoin m_join;
};
@ -178,7 +179,7 @@ public:
dp::GLState GetState() override
{
dp::GLState state(gpu::LINE_PROGRAM, dp::GLState::GeometryLayer);
dp::GLState state(gpu::LINE_PROGRAM, m_params.m_depthLayer);
state.SetColorTexture(m_params.m_color.GetTexture());
return state;
}
@ -207,7 +208,7 @@ public:
if (m_params.m_cap == dp::ButtCap)
return TBase::GetCapState();
dp::GLState state(gpu::CAP_JOIN_PROGRAM, dp::GLState::GeometryLayer);
dp::GLState state(gpu::CAP_JOIN_PROGRAM, m_params.m_depthLayer);
state.SetColorTexture(m_params.m_color.GetTexture());
state.SetDepthFunction(gl_const::GLLess);
return state;
@ -278,7 +279,7 @@ public:
dp::GLState GetState() override
{
dp::GLState state(gpu::AREA_OUTLINE_PROGRAM, dp::GLState::GeometryLayer);
dp::GLState state(gpu::AREA_OUTLINE_PROGRAM, m_params.m_depthLayer);
state.SetColorTexture(m_params.m_color.GetTexture());
state.SetDrawAsLine(true);
state.SetLineWidth(m_lineWidth);
@ -321,7 +322,7 @@ public:
dp::GLState GetState() override
{
dp::GLState state(gpu::DASHED_LINE_PROGRAM, dp::GLState::GeometryLayer);
dp::GLState state(gpu::DASHED_LINE_PROGRAM, m_params.m_depthLayer);
state.SetColorTexture(m_params.m_color.GetTexture());
state.SetMaskTexture(m_texCoordGen.GetRegion().GetTexture());
return state;
@ -491,6 +492,7 @@ void LineShape::Prepare(ref_ptr<dp::TextureManager> textures) const
p.m_cap = m_params.m_cap;
p.m_color = colorRegion;
p.m_depth = m_params.m_depth;
p.m_depthLayer = m_params.m_depthLayer;
p.m_join = m_params.m_join;
p.m_pxHalfWidth = pxHalfWidth;
};

View file

@ -182,6 +182,7 @@ void CacheUserLines(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture
params.m_join = dp::RoundJoin;
params.m_color = layer.m_color;
params.m_depth = layer.m_depth;
params.m_depthLayer = dp::GLState::UserLineLayer;
params.m_width = layer.m_width * vs;
params.m_minVisibleScale = 1;
params.m_rank = 0;