forked from organicmaps/organicmaps
Render user lines in separate layer above 2d geometry.
This commit is contained in:
parent
2a38919e49
commit
cae0912c0a
5 changed files with 24 additions and 6 deletions
|
@ -38,6 +38,7 @@ public:
|
|||
{
|
||||
/// Do not change order
|
||||
GeometryLayer,
|
||||
UserLineLayer,
|
||||
OverlayLayer,
|
||||
UserMarkLayer,
|
||||
NavigationLayer,
|
||||
|
|
|
@ -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 ||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue