Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drape/glstate.cpp20
-rw-r--r--drape/glstate.hpp6
-rw-r--r--drape_frontend/apply_feature_functors.cpp8
-rw-r--r--drape_frontend/area_shape.cpp5
-rw-r--r--drape_frontend/arrow3d.cpp1
-rw-r--r--drape_frontend/circles_pack_shape.cpp1
-rw-r--r--drape_frontend/colored_symbol_shape.cpp1
-rw-r--r--drape_frontend/drape_api_builder.cpp4
-rw-r--r--drape_frontend/drape_engine.cpp1
-rwxr-xr-xdrape_frontend/frontend_renderer.cpp29
-rwxr-xr-xdrape_frontend/frontend_renderer.hpp3
-rw-r--r--drape_frontend/gui/choose_position_mark.cpp1
-rw-r--r--drape_frontend/gui/compass.cpp1
-rw-r--r--drape_frontend/gui/gui_text.cpp8
-rw-r--r--drape_frontend/gui/ruler.cpp1
-rw-r--r--drape_frontend/gui/watermark.cpp1
-rw-r--r--drape_frontend/line_shape.cpp6
-rw-r--r--drape_frontend/my_position.cpp2
-rw-r--r--drape_frontend/path_symbol_shape.cpp1
-rw-r--r--drape_frontend/path_text_shape.cpp2
-rw-r--r--drape_frontend/poi_symbol_shape.cpp2
-rwxr-xr-xdrape_frontend/render_group.cpp9
-rw-r--r--drape_frontend/selection_shape.cpp1
-rw-r--r--drape_frontend/shape_view_params.hpp1
-rw-r--r--drape_frontend/text_shape.cpp2
-rw-r--r--drape_frontend/transit_scheme_builder.cpp4
-rw-r--r--drape_frontend/transit_scheme_renderer.cpp5
-rw-r--r--drape_frontend/user_mark_shapes.cpp7
-rw-r--r--drape_frontend/user_mark_shapes.hpp1
-rw-r--r--drape_frontend/user_marks_provider.hpp1
-rw-r--r--map/search_mark.hpp1
-rw-r--r--map/user_mark.hpp1
32 files changed, 88 insertions, 49 deletions
diff --git a/drape/glstate.cpp b/drape/glstate.cpp
index 5c5705b215..6f52e0bfc8 100644
--- a/drape/glstate.cpp
+++ b/drape/glstate.cpp
@@ -43,6 +43,16 @@ void GLState::SetDepthFunction(glConst functionName)
m_depthFunction = functionName;
}
+bool GLState::GetDepthTestEnabled() const
+{
+ return m_depthTestEnabled;
+}
+
+void GLState::SetDepthTestEnabled(bool enabled)
+{
+ m_depthTestEnabled = enabled;
+}
+
glConst GLState::GetTextureFilter() const
{
return m_textureFilter;
@@ -159,7 +169,15 @@ void ApplyState(GLState const & state, ref_ptr<GpuProgram> program)
{
TextureState::ApplyTextures(state, program);
ApplyBlending(state);
- GLFunctions::glDepthFunc(state.GetDepthFunction());
+ if (state.GetDepthTestEnabled())
+ {
+ GLFunctions::glEnable(gl_const::GLDepthTest);
+ GLFunctions::glDepthFunc(state.GetDepthFunction());
+ }
+ else
+ {
+ GLFunctions::glDisable(gl_const::GLDepthTest);
+ }
ASSERT_GREATER_OR_EQUAL(state.GetLineWidth(), 0, ());
GLFunctions::glLineWidth(static_cast<uint32_t>(state.GetLineWidth()));
}
diff --git a/drape/glstate.hpp b/drape/glstate.hpp
index 195971ddd4..9c3ca73b6a 100644
--- a/drape/glstate.hpp
+++ b/drape/glstate.hpp
@@ -82,6 +82,9 @@ public:
glConst GetDepthFunction() const;
void SetDepthFunction(glConst functionName);
+ bool GetDepthTestEnabled() const;
+ void SetDepthTestEnabled(bool enabled);
+
glConst GetTextureFilter() const;
void SetTextureFilter(glConst filter);
@@ -99,7 +102,10 @@ private:
size_t m_gpuProgram;
size_t m_gpuProgram3d;
Blending m_blending;
+
+ bool m_depthTestEnabled = true;
glConst m_depthFunction = gl_const::GLLessOrEqual;
+
glConst m_textureFilter = gl_const::GLLinear;
ref_ptr<Texture> m_colorTexture;
diff --git a/drape_frontend/apply_feature_functors.cpp b/drape_frontend/apply_feature_functors.cpp
index f91c8818d8..c45f7aae2e 100644
--- a/drape_frontend/apply_feature_functors.cpp
+++ b/drape_frontend/apply_feature_functors.cpp
@@ -532,6 +532,8 @@ void ApplyPointFeature::ProcessPointRule(Stylist::TRuleWrapper const & rule)
params.m_tileCenter = m_tileRect.Center();
ExtractCaptionParams(capRule, pRule->GetCaption(1), depth, params);
params.m_depthLayer = m_depthLayer;
+ params.m_depthTestEnabled = m_depthLayer != RenderState::NavigationLayer &&
+ m_depthLayer != RenderState::OverlayLayer;
params.m_minVisibleScale = m_minVisibleScale;
params.m_rank = m_rank;
params.m_posZ = m_posZ;
@@ -578,6 +580,8 @@ void ApplyPointFeature::Finish(ref_ptr<dp::TextureManager> texMng)
{
PoiSymbolViewParams params(m_id);
params.m_tileCenter = m_tileRect.Center();
+ params.m_depthTestEnabled = m_depthLayer != RenderState::NavigationLayer &&
+ m_depthLayer != RenderState::OverlayLayer;
params.m_depth = static_cast<float>(m_symbolDepth);
params.m_depthLayer = m_depthLayer;
params.m_minVisibleScale = m_minVisibleScale;
@@ -633,6 +637,7 @@ void ApplyPointFeature::Finish(ref_ptr<dp::TextureManager> texMng)
params.m_depthLayer = m_depthLayer;
params.m_minVisibleScale = m_minVisibleScale;
params.m_rank = m_rank;
+ params.m_depthTestEnabled = true;
params.m_depth = static_cast<float>(m_symbolDepth);
auto coloredShape = make_unique_dp<ColoredSymbolShape>(m2::PointD(m_centerPoint), params,
@@ -1008,6 +1013,7 @@ void ApplyLineFeatureAdditional::GetRoadShieldsViewParams(ref_ptr<dp::TextureMan
ShieldRuleProtoToFontDecl(m_shieldRule, baseFont);
dp::FontDecl font = GetRoadShieldTextFont(baseFont, shield);
textParams.m_tileCenter = m_tileRect.Center();
+ textParams.m_depthTestEnabled = false;
textParams.m_depth = m_depth;
textParams.m_depthLayer = RenderState::OverlayLayer;
textParams.m_minVisibleScale = kShieldMinVisibleZoomLevel;
@@ -1038,6 +1044,7 @@ void ApplyLineFeatureAdditional::GetRoadShieldsViewParams(ref_ptr<dp::TextureMan
// Generated symbol properties.
symbolParams.m_featureID = m_id;
symbolParams.m_tileCenter = m_tileRect.Center();
+ symbolParams.m_depthTestEnabled = true;
symbolParams.m_depth = m_depth;
symbolParams.m_depthLayer = RenderState::OverlayLayer;
symbolParams.m_minVisibleScale = kShieldMinVisibleZoomLevel;
@@ -1066,6 +1073,7 @@ void ApplyLineFeatureAdditional::GetRoadShieldsViewParams(ref_ptr<dp::TextureMan
std::string symbolName = GetRoadShieldSymbolName(shield, fontScale);
poiParams.m_tileCenter = m_tileRect.Center();
poiParams.m_depth = m_depth;
+ poiParams.m_depthTestEnabled = false;
poiParams.m_depthLayer = RenderState::OverlayLayer;
poiParams.m_minVisibleScale = kShieldMinVisibleZoomLevel;
poiParams.m_rank = m_rank;
diff --git a/drape_frontend/area_shape.cpp b/drape_frontend/area_shape.cpp
index 3d368ff873..334654900a 100644
--- a/drape_frontend/area_shape.cpp
+++ b/drape_frontend/area_shape.cpp
@@ -61,6 +61,7 @@ void AreaShape::DrawArea(ref_ptr<dp::Batcher> batcher, m2::PointD const & colorU
});
auto state = CreateGLState(gpu::Program::Area, RenderState::GeometryLayer);
+ state.SetDepthTestEnabled(m_params.m_depthTestEnabled);
state.SetColorTexture(texture);
dp::AttributeProvider provider(1, static_cast<uint32_t>(vertexes.size()));
@@ -82,6 +83,7 @@ void AreaShape::DrawArea(ref_ptr<dp::Batcher> batcher, m2::PointD const & colorU
}
auto outlineState = CreateGLState(gpu::Program::AreaOutline, RenderState::GeometryLayer);
+ outlineState.SetDepthTestEnabled(m_params.m_depthTestEnabled);
outlineState.SetColorTexture(texture);
outlineState.SetDrawAsLine(true);
@@ -115,6 +117,7 @@ void AreaShape::DrawHatchingArea(ref_ptr<dp::Batcher> batcher, m2::PointD const
}
auto state = CreateGLState(gpu::Program::HatchingArea, RenderState::GeometryLayer);
+ state.SetDepthTestEnabled(m_params.m_depthTestEnabled);
state.SetColorTexture(texture);
state.SetMaskTexture(hatchingTexture);
state.SetTextureFilter(gl_const::GLLinear);
@@ -163,6 +166,7 @@ void AreaShape::DrawArea3D(ref_ptr<dp::Batcher> batcher, m2::PointD const & colo
}
auto state = CreateGLState(gpu::Program::Area3d, RenderState::Geometry3dLayer);
+ state.SetDepthTestEnabled(m_params.m_depthTestEnabled);
state.SetColorTexture(texture);
state.SetBlending(dp::Blending(false /* isEnabled */));
@@ -176,6 +180,7 @@ void AreaShape::DrawArea3D(ref_ptr<dp::Batcher> batcher, m2::PointD const & colo
glsl::vec2 const ouv = glsl::ToVec2(outlineUv);
auto outlineState = CreateGLState(gpu::Program::Area3dOutline, RenderState::Geometry3dLayer);
+ outlineState.SetDepthTestEnabled(m_params.m_depthTestEnabled);
outlineState.SetColorTexture(texture);
outlineState.SetBlending(dp::Blending(false /* isEnabled */));
outlineState.SetDrawAsLine(true);
diff --git a/drape_frontend/arrow3d.cpp b/drape_frontend/arrow3d.cpp
index 7aa7e03fb1..05d1efafb5 100644
--- a/drape_frontend/arrow3d.cpp
+++ b/drape_frontend/arrow3d.cpp
@@ -36,6 +36,7 @@ df::ColorConstant const kArrow3DOutlineColor = "Arrow3DOutline";
Arrow3d::Arrow3d()
: m_state(CreateGLState(gpu::Program::Arrow3d, RenderState::OverlayLayer))
{
+ m_state.SetDepthTestEnabled(false);
m_vertices = {
0.0f, 0.0f, -1.0f, 1.0f, -1.2f, -1.0f, 0.0f, 1.0f, 0.0f, 2.0f, 0.0f, 1.0f,
0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 2.0f, 0.0f, 1.0f, 1.2f, -1.0f, 0.0f, 1.0f,
diff --git a/drape_frontend/circles_pack_shape.cpp b/drape_frontend/circles_pack_shape.cpp
index e25b19fd91..7817864527 100644
--- a/drape_frontend/circles_pack_shape.cpp
+++ b/drape_frontend/circles_pack_shape.cpp
@@ -28,6 +28,7 @@ dp::GLState GetCirclesPackState(ref_ptr<dp::TextureManager> texMng)
{
auto state = CreateGLState(gpu::Program::CirclePoint, RenderState::OverlayLayer);
state.SetColorTexture(texMng->GetSymbolsTexture());
+ state.SetDepthTestEnabled(false);
return state;
}
diff --git a/drape_frontend/colored_symbol_shape.cpp b/drape_frontend/colored_symbol_shape.cpp
index 1daaaac18b..11a45bf21c 100644
--- a/drape_frontend/colored_symbol_shape.cpp
+++ b/drape_frontend/colored_symbol_shape.cpp
@@ -300,6 +300,7 @@ void ColoredSymbolShape::Draw(ref_ptr<dp::Batcher> batcher,
}
auto state = CreateGLState(gpu::Program::ColoredSymbol, m_params.m_depthLayer);
state.SetProgram3d(gpu::Program::ColoredSymbolBillboard);
+ state.SetDepthTestEnabled(m_params.m_depthTestEnabled);
state.SetColorTexture(colorRegion.GetTexture());
state.SetDepthFunction(gl_const::GLLess);
diff --git a/drape_frontend/drape_api_builder.cpp b/drape_frontend/drape_api_builder.cpp
index 8b1f79a7b4..1b2222fd2f 100644
--- a/drape_frontend/drape_api_builder.cpp
+++ b/drape_frontend/drape_api_builder.cpp
@@ -64,7 +64,7 @@ void DrapeApiBuilder::BuildLines(DrapeApi::TLines const & lines, ref_ptr<dp::Tex
m2::SharedSpline spline(data.m_points);
LineViewParams lvp;
lvp.m_tileCenter = property->m_center;
- lvp.m_depth = 0.0f;
+ lvp.m_depthTestEnabled = false;
lvp.m_minVisibleScale = 1;
lvp.m_cap = dp::RoundCap;
lvp.m_color = data.m_color;
@@ -76,7 +76,7 @@ void DrapeApiBuilder::BuildLines(DrapeApi::TLines const & lines, ref_ptr<dp::Tex
{
ColoredSymbolViewParams cvp;
cvp.m_tileCenter = property->m_center;
- cvp.m_depth = 0.0f;
+ cvp.m_depthTestEnabled = false;
cvp.m_minVisibleScale = 1;
cvp.m_shape = ColoredSymbolViewParams::Shape::Circle;
cvp.m_color = data.m_color;
diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp
index ef77fa6c56..a271d88e04 100644
--- a/drape_frontend/drape_engine.cpp
+++ b/drape_frontend/drape_engine.cpp
@@ -833,6 +833,7 @@ drape_ptr<UserMarkRenderParams> DrapeEngine::GenerateMarkRenderInfo(UserPointMar
{
auto renderInfo = make_unique_dp<UserMarkRenderParams>();
renderInfo->m_anchor = mark->GetAnchor();
+ renderInfo->m_depthTestEnabled = mark->GetDepthTestEnabled();
renderInfo->m_depth = mark->GetDepth();
renderInfo->m_depthLayer = mark->GetDepthLayer();
renderInfo->m_minZoom = mark->GetMinZoom();
diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp
index 0335dbb737..84939574a2 100755
--- a/drape_frontend/frontend_renderer.cpp
+++ b/drape_frontend/frontend_renderer.cpp
@@ -1225,7 +1225,6 @@ void FrontendRenderer::RenderScene(ScreenBase const & modelView, bool activeFram
if (m_postprocessRenderer->BeginFrame(activeFrame))
{
- GLFunctions::glEnable(gl_const::GLDepthTest);
m_viewport.Apply();
RefreshBgColor();
GLFunctions::glClear(gl_const::GLColorBit | gl_const::GLDepthBit | gl_const::GLStencilBit);
@@ -1248,7 +1247,6 @@ void FrontendRenderer::RenderScene(ScreenBase const & modelView, bool activeFram
RenderRouteLayer(modelView);
}
- GLFunctions::glDisable(gl_const::GLDepthTest);
GLFunctions::glClear(gl_const::GLDepthBit);
if (m_selectionShape != nullptr)
@@ -1307,7 +1305,6 @@ void FrontendRenderer::RenderScene(ScreenBase const & modelView, bool activeFram
if (!m_postprocessRenderer->EndFrame(make_ref(m_gpuProgramManager)))
return;
- GLFunctions::glDisable(gl_const::GLDepthTest);
m_myPositionController->Render(modelView, m_currentZoomLevel, make_ref(m_gpuProgramManager),
m_frameValues);
@@ -1352,8 +1349,6 @@ void FrontendRenderer::Render3dLayer(ScreenBase const & modelView, bool useFrame
GLFunctions::glClear(gl_const::GLDepthBit);
}
- GLFunctions::glEnable(gl_const::GLDepthTest);
-
layer.Sort(make_ref(m_overlayTree));
for (drape_ptr<RenderGroup> const & group : layer.m_renderGroups)
RenderSingleGroup(modelView, make_ref(group));
@@ -1401,26 +1396,22 @@ bool FrontendRenderer::HasRouteData() const
void FrontendRenderer::RenderTransitSchemeLayer(ScreenBase const & modelView)
{
GLFunctions::glClear(gl_const::GLDepthBit);
- GLFunctions::glEnable(gl_const::GLDepthTest);
if (m_transitSchemeEnabled && m_transitSchemeRenderer->IsSchemeVisible(m_currentZoomLevel))
{
RenderTransitBackground();
m_transitSchemeRenderer->RenderTransit(modelView, make_ref(m_gpuProgramManager),
make_ref(m_postprocessRenderer), m_frameValues);
}
- GLFunctions::glDisable(gl_const::GLDepthTest);
}
void FrontendRenderer::RenderTrafficLayer(ScreenBase const & modelView)
{
GLFunctions::glClear(gl_const::GLDepthBit);
- GLFunctions::glEnable(gl_const::GLDepthTest);
if (m_trafficRenderer->HasRenderData())
{
m_trafficRenderer->RenderTraffic(modelView, m_currentZoomLevel, 1.0f /* opacity */,
make_ref(m_gpuProgramManager), m_frameValues);
}
- GLFunctions::glDisable(gl_const::GLDepthTest);
}
void FrontendRenderer::RenderTransitBackground()
@@ -1447,34 +1438,20 @@ void FrontendRenderer::RenderRouteLayer(ScreenBase const & modelView)
RenderTransitBackground();
GLFunctions::glClear(gl_const::GLDepthBit);
- GLFunctions::glEnable(gl_const::GLDepthTest);
m_routeRenderer->RenderRoute(modelView, m_trafficRenderer->HasRenderData(),
make_ref(m_gpuProgramManager), m_frameValues);
- GLFunctions::glDisable(gl_const::GLDepthTest);
}
-void FrontendRenderer::RenderUserMarksLayer(ScreenBase const & modelView, RenderState::DepthLayer layerId,
- bool enableDepthTest)
+void FrontendRenderer::RenderUserMarksLayer(ScreenBase const & modelView, RenderState::DepthLayer layerId)
{
auto & renderGroups = m_layers[layerId].m_renderGroups;
if (renderGroups.empty())
return;
- if (enableDepthTest)
- {
- GLFunctions::glEnable(gl_const::GLDepthTest);
- GLFunctions::glClear(gl_const::GLDepthBit);
- }
- else
- {
- GLFunctions::glDisable(gl_const::GLDepthTest);
- }
+ GLFunctions::glClear(gl_const::GLDepthBit);
for (drape_ptr<RenderGroup> & group : renderGroups)
RenderSingleGroup(modelView, make_ref(group));
-
- if (enableDepthTest)
- GLFunctions::glDisable(gl_const::GLDepthTest);
}
void FrontendRenderer::RenderSearchMarksLayer(ScreenBase const & modelView)
@@ -1486,7 +1463,7 @@ void FrontendRenderer::RenderSearchMarksLayer(ScreenBase const & modelView)
group->SetOverlayVisibility(true);
group->Update(modelView);
}
- RenderUserMarksLayer(modelView, RenderState::SearchMarkLayer, false /* enableDepthTest */);
+ RenderUserMarksLayer(modelView, RenderState::SearchMarkLayer);
}
void FrontendRenderer::BuildOverlayTree(ScreenBase const & modelView)
diff --git a/drape_frontend/frontend_renderer.hpp b/drape_frontend/frontend_renderer.hpp
index 20d7f4dfeb..353e15b04b 100755
--- a/drape_frontend/frontend_renderer.hpp
+++ b/drape_frontend/frontend_renderer.hpp
@@ -163,8 +163,7 @@ private:
void Render3dLayer(ScreenBase const & modelView, bool useFramebuffer);
void RenderOverlayLayer(ScreenBase const & modelView);
void RenderNavigationOverlayLayer(ScreenBase const & modelView);
- void RenderUserMarksLayer(ScreenBase const & modelView, RenderState::DepthLayer layerId,
- bool enableDepthTest = true);
+ void RenderUserMarksLayer(ScreenBase const & modelView, RenderState::DepthLayer layerId);
void RenderTransitSchemeLayer(ScreenBase const & modelView);
void RenderTrafficLayer(ScreenBase const & modelView);
void RenderRouteLayer(ScreenBase const & modelView);
diff --git a/drape_frontend/gui/choose_position_mark.cpp b/drape_frontend/gui/choose_position_mark.cpp
index 988b56455f..7b813aa83e 100644
--- a/drape_frontend/gui/choose_position_mark.cpp
+++ b/drape_frontend/gui/choose_position_mark.cpp
@@ -61,6 +61,7 @@ drape_ptr<ShapeRenderer> ChoosePositionMark::Draw(ref_ptr<dp::TextureManager> te
auto state = df::CreateGLState(gpu::Program::TexturingGui, df::RenderState::GuiLayer);
state.SetColorTexture(region.GetTexture());
+ state.SetDepthTestEnabled(false);
dp::AttributeProvider provider(1 /*streamCount*/, 4 /*vertexCount*/);
dp::BindingInfo info(2 /*count*/);
diff --git a/drape_frontend/gui/compass.cpp b/drape_frontend/gui/compass.cpp
index efdfa7f64f..814603ebe9 100644
--- a/drape_frontend/gui/compass.cpp
+++ b/drape_frontend/gui/compass.cpp
@@ -108,6 +108,7 @@ drape_ptr<ShapeRenderer> Compass::Draw(m2::PointF & compassSize, ref_ptr<dp::Tex
auto state = df::CreateGLState(gpu::Program::TexturingGui, df::RenderState::GuiLayer);
state.SetColorTexture(region.GetTexture());
+ state.SetDepthTestEnabled(false);
dp::AttributeProvider provider(1, 4);
dp::BindingInfo info(2);
diff --git a/drape_frontend/gui/gui_text.cpp b/drape_frontend/gui/gui_text.cpp
index 234fce2a5f..ccdd7d9eb9 100644
--- a/drape_frontend/gui/gui_text.cpp
+++ b/drape_frontend/gui/gui_text.cpp
@@ -107,7 +107,9 @@ dp::BindingInfo const & StaticLabel::Vertex::GetBindingInfo()
StaticLabel::LabelResult::LabelResult()
: m_state(df::CreateGLState(gpu::Program::TextOutlinedGui, df::RenderState::GuiLayer))
-{}
+{
+ m_state.SetDepthTestEnabled(false);
+}
char const * StaticLabel::DefaultDelim = "\n";
@@ -286,7 +288,9 @@ dp::BindingInfo const & MutableLabel::DynamicVertex::GetBindingInfo()
MutableLabel::PrecacheResult::PrecacheResult()
: m_state(df::CreateGLState(gpu::Program::TextOutlinedGui, df::RenderState::GuiLayer))
-{}
+{
+ m_state.SetDepthTestEnabled(false);
+}
MutableLabel::MutableLabel(dp::Anchor anchor)
: m_anchor(anchor)
diff --git a/drape_frontend/gui/ruler.cpp b/drape_frontend/gui/ruler.cpp
index 58487f387a..536bffb372 100644
--- a/drape_frontend/gui/ruler.cpp
+++ b/drape_frontend/gui/ruler.cpp
@@ -215,6 +215,7 @@ void Ruler::DrawRuler(m2::PointF & size, ShapeControl & control, ref_ptr<dp::Tex
auto state = df::CreateGLState(gpu::Program::Ruler, df::RenderState::GuiLayer);
state.SetColorTexture(reg.GetTexture());
+ state.SetDepthTestEnabled(false);
dp::AttributeProvider provider(1, 4);
provider.InitStream(0, GetBindingInfo(), make_ref(data.data()));
diff --git a/drape_frontend/gui/watermark.cpp b/drape_frontend/gui/watermark.cpp
index 85c9369bd1..0d544ba7ec 100644
--- a/drape_frontend/gui/watermark.cpp
+++ b/drape_frontend/gui/watermark.cpp
@@ -84,6 +84,7 @@ drape_ptr<ShapeRenderer> Watermark::Draw(m2::PointF & size, ref_ptr<dp::TextureM
auto state = df::CreateGLState(gpu::Program::TexturingGui, df::RenderState::GuiLayer);
state.SetColorTexture(region.GetTexture());
+ state.SetDepthTestEnabled(false);
dp::AttributeProvider provider(1 /* streamCount */, 4 /* vertexCount */);
dp::BindingInfo info(2 /* count */);
diff --git a/drape_frontend/line_shape.cpp b/drape_frontend/line_shape.cpp
index b42ec47a27..6ddd32f949 100644
--- a/drape_frontend/line_shape.cpp
+++ b/drape_frontend/line_shape.cpp
@@ -59,6 +59,7 @@ struct BaseBuilderParams
dp::TextureManager::ColorRegion m_color;
float m_pxHalfWidth;
float m_depth;
+ bool m_depthTestEnabled;
RenderState::DepthLayer m_depthLayer;
dp::LineCap m_cap;
dp::LineJoin m_join;
@@ -178,6 +179,7 @@ public:
{
auto state = CreateGLState(gpu::Program::Line, m_params.m_depthLayer);
state.SetColorTexture(m_params.m_color.GetTexture());
+ state.SetDepthTestEnabled(m_params.m_depthTestEnabled);
return state;
}
@@ -206,6 +208,7 @@ public:
return TBase::GetCapState();
auto state = CreateGLState(gpu::Program::CapJoin, m_params.m_depthLayer);
+ state.SetDepthTestEnabled(m_params.m_depthTestEnabled);
state.SetColorTexture(m_params.m_color.GetTexture());
state.SetDepthFunction(gl_const::GLLess);
return state;
@@ -277,6 +280,7 @@ public:
dp::GLState GetState() override
{
auto state = CreateGLState(gpu::Program::AreaOutline, m_params.m_depthLayer);
+ state.SetDepthTestEnabled(m_params.m_depthTestEnabled);
state.SetColorTexture(m_params.m_color.GetTexture());
state.SetDrawAsLine(true);
state.SetLineWidth(m_lineWidth);
@@ -320,6 +324,7 @@ public:
dp::GLState GetState() override
{
auto state = CreateGLState(gpu::Program::DashedLine, m_params.m_depthLayer);
+ state.SetDepthTestEnabled(m_params.m_depthTestEnabled);
state.SetColorTexture(m_params.m_color.GetTexture());
state.SetMaskTexture(m_texCoordGen.GetRegion().GetTexture());
return state;
@@ -488,6 +493,7 @@ void LineShape::Prepare(ref_ptr<dp::TextureManager> textures) const
{
p.m_cap = m_params.m_cap;
p.m_color = colorRegion;
+ p.m_depthTestEnabled = m_params.m_depthTestEnabled;
p.m_depth = m_params.m_depth;
p.m_depthLayer = m_params.m_depthLayer;
p.m_join = m_params.m_join;
diff --git a/drape_frontend/my_position.cpp b/drape_frontend/my_position.cpp
index b303fea498..67e1e77333 100644
--- a/drape_frontend/my_position.cpp
+++ b/drape_frontend/my_position.cpp
@@ -168,6 +168,7 @@ void MyPosition::CacheAccuracySector(ref_ptr<dp::TextureManager> mng)
}
auto state = CreateGLState(gpu::Program::Accuracy, RenderState::OverlayLayer);
+ state.SetDepthTestEnabled(false);
state.SetColorTexture(color.GetTexture());
{
@@ -219,6 +220,7 @@ void MyPosition::CachePointPosition(ref_ptr<dp::TextureManager> mng)
m_arrow3d.SetTexture(mng);
auto state = CreateGLState(gpu::Program::MyPosition, RenderState::OverlayLayer);
+ state.SetDepthTestEnabled(false);
state.SetColorTexture(pointSymbol.GetTexture());
dp::TextureManager::SymbolRegion * symbols[kSymbolsCount] = { &pointSymbol };
diff --git a/drape_frontend/path_symbol_shape.cpp b/drape_frontend/path_symbol_shape.cpp
index b9f45b1221..4d9ffa87c4 100644
--- a/drape_frontend/path_symbol_shape.cpp
+++ b/drape_frontend/path_symbol_shape.cpp
@@ -55,6 +55,7 @@ void PathSymbolShape::Draw(ref_ptr<dp::Batcher> batcher, ref_ptr<dp::TextureMana
auto state = CreateGLState(gpu::Program::PathSymbol, RenderState::GeometryLayer);
state.SetColorTexture(region.GetTexture());
+ state.SetDepthTestEnabled(m_params.m_depthTestEnabled);
dp::AttributeProvider provider(1, static_cast<uint32_t>(buffer.size()));
provider.InitStream(0, gpu::SolidTexturingVertex::GetBindingInfo(), make_ref(buffer.data()));
diff --git a/drape_frontend/path_text_shape.cpp b/drape_frontend/path_text_shape.cpp
index efd476ff4d..57b3d3fbb5 100644
--- a/drape_frontend/path_text_shape.cpp
+++ b/drape_frontend/path_text_shape.cpp
@@ -87,6 +87,7 @@ void PathTextShape::DrawPathTextPlain(ref_ptr<dp::TextureManager> textures,
RenderState::OverlayLayer);
state.SetProgram3d(layout->GetFixedHeight() > 0 ?
gpu::Program::TextFixedBillboard : gpu::Program::TextBillboard);
+ state.SetDepthTestEnabled(m_params.m_depthTestEnabled);
state.SetColorTexture(color.GetTexture());
state.SetMaskTexture(layout->GetMaskTexture());
@@ -125,6 +126,7 @@ void PathTextShape::DrawPathTextOutlined(ref_ptr<dp::TextureManager> textures,
auto state = CreateGLState(gpu::Program::TextOutlined, RenderState::OverlayLayer);
state.SetProgram3d(gpu::Program::TextOutlinedBillboard);
+ state.SetDepthTestEnabled(m_params.m_depthTestEnabled);
state.SetColorTexture(color.GetTexture());
state.SetMaskTexture(layout->GetMaskTexture());
diff --git a/drape_frontend/poi_symbol_shape.cpp b/drape_frontend/poi_symbol_shape.cpp
index 3edd88b185..038dbeba23 100644
--- a/drape_frontend/poi_symbol_shape.cpp
+++ b/drape_frontend/poi_symbol_shape.cpp
@@ -69,6 +69,7 @@ void Batch<SV>(ref_ptr<dp::Batcher> batcher, drape_ptr<dp::OverlayHandle> && han
auto state = df::CreateGLState(gpu::Program::Texturing, params.m_depthLayer);
state.SetProgram3d(gpu::Program::TexturingBillboard);
+ state.SetDepthTestEnabled(params.m_depthTestEnabled);
state.SetColorTexture(symbolRegion.GetTexture());
state.SetTextureFilter(gl_const::GLNearest);
@@ -102,6 +103,7 @@ void Batch<MV>(ref_ptr<dp::Batcher> batcher, drape_ptr<dp::OverlayHandle> && han
auto state = df::CreateGLState(gpu::Program::MaskedTexturing, params.m_depthLayer);
state.SetProgram3d(gpu::Program::MaskedTexturingBillboard);
+ state.SetDepthTestEnabled(params.m_depthTestEnabled);
state.SetColorTexture(symbolRegion.GetTexture());
state.SetMaskTexture(colorRegion.GetTexture()); // Here mask is a color.
state.SetTextureFilter(gl_const::GLNearest);
diff --git a/drape_frontend/render_group.cpp b/drape_frontend/render_group.cpp
index 102f681215..02b45c82fe 100755
--- a/drape_frontend/render_group.cpp
+++ b/drape_frontend/render_group.cpp
@@ -84,15 +84,6 @@ void RenderGroup::Render(ScreenBase const & screen, ref_ptr<gpu::ProgramManager>
auto const program = m_state.GetProgram<gpu::Program>();
auto const program3d = m_state.GetProgram3d<gpu::Program>();
- // TODO: hide GLDepthTest under the state.
- if (IsOverlay())
- {
- if (program == gpu::Program::ColoredSymbol || program3d == gpu::Program::ColoredSymbolBillboard)
- GLFunctions::glEnable(gl_const::GLDepthTest);
- else
- GLFunctions::glDisable(gl_const::GLDepthTest);
- }
-
// Set frame values to group's params.
frameValues.SetTo(m_params);
diff --git a/drape_frontend/selection_shape.cpp b/drape_frontend/selection_shape.cpp
index 56ab21edda..deb55c7cab 100644
--- a/drape_frontend/selection_shape.cpp
+++ b/drape_frontend/selection_shape.cpp
@@ -85,6 +85,7 @@ SelectionShape::SelectionShape(ref_ptr<dp::TextureManager> mng)
auto state = CreateGLState(gpu::Program::Accuracy, RenderState::OverlayLayer);
state.SetColorTexture(color.GetTexture());
+ state.SetDepthTestEnabled(false);
{
dp::Batcher batcher(kTriangleCount * dp::Batcher::IndexPerTriangle, kVertexCount);
diff --git a/drape_frontend/shape_view_params.hpp b/drape_frontend/shape_view_params.hpp
index 14b21740d5..0fc2156805 100644
--- a/drape_frontend/shape_view_params.hpp
+++ b/drape_frontend/shape_view_params.hpp
@@ -23,6 +23,7 @@ struct CommonViewParams
{
RenderState::DepthLayer m_depthLayer = RenderState::GeometryLayer;
float m_depth = 0.0f;
+ bool m_depthTestEnabled = true;
int m_minVisibleScale = 0;
uint8_t m_rank = 0;
m2::PointD m_tileCenter;
diff --git a/drape_frontend/text_shape.cpp b/drape_frontend/text_shape.cpp
index 68f9978710..2df3ce6b42 100644
--- a/drape_frontend/text_shape.cpp
+++ b/drape_frontend/text_shape.cpp
@@ -317,6 +317,7 @@ void TextShape::DrawSubStringPlain(StraightTextLayout const & layout, dp::FontDe
bool const isNonSdfText = layout.GetFixedHeight() > 0;
auto state = CreateGLState(isNonSdfText ? gpu::Program::TextFixed : gpu::Program::Text, m_params.m_depthLayer);
state.SetProgram3d(isNonSdfText ? gpu::Program::TextFixedBillboard : gpu::Program::TextBillboard);
+ state.SetDepthTestEnabled(m_params.m_depthTestEnabled);
ASSERT(color.GetTexture() == outline.GetTexture(), ());
state.SetColorTexture(color.GetTexture());
@@ -382,6 +383,7 @@ void TextShape::DrawSubStringOutlined(StraightTextLayout const & layout, dp::Fon
auto state = CreateGLState(gpu::Program::TextOutlined, m_params.m_depthLayer);
state.SetProgram3d(gpu::Program::TextOutlinedBillboard);
+ state.SetDepthTestEnabled(m_params.m_depthTestEnabled);
ASSERT(color.GetTexture() == outline.GetTexture(), ());
state.SetColorTexture(color.GetTexture());
state.SetMaskTexture(layout.GetMaskTexture());
diff --git a/drape_frontend/transit_scheme_builder.cpp b/drape_frontend/transit_scheme_builder.cpp
index 1fafea031a..0ff61a2eae 100644
--- a/drape_frontend/transit_scheme_builder.cpp
+++ b/drape_frontend/transit_scheme_builder.cpp
@@ -730,7 +730,7 @@ void TransitSchemeBuilder::GenerateTitles(StopNodeParams const & stopParams, m2:
textParams.m_titleDecl = titleDecl;
textParams.m_titleDecl.m_primaryText = title.m_text;
textParams.m_titleDecl.m_anchor = title.m_anchor;
- textParams.m_depth = kBaseTitleDepth;
+ textParams.m_depthTestEnabled = false;
textParams.m_depthLayer = RenderState::TransitSchemeLayer;
textParams.m_specialDisplacement = SpecialDisplacement::TransitScheme;
textParams.m_specialPriority = priority;
@@ -746,7 +746,7 @@ void TransitSchemeBuilder::GenerateTitles(StopNodeParams const & stopParams, m2:
colorParams.m_color = dp::Color::Transparent();
colorParams.m_featureID = featureId;
colorParams.m_tileCenter = pivot;
- colorParams.m_depth = kBaseTitleDepth;
+ colorParams.m_depthTestEnabled = false;
colorParams.m_depthLayer = RenderState::TransitSchemeLayer;
colorParams.m_specialDisplacement = SpecialDisplacement::TransitScheme;
colorParams.m_specialPriority = static_cast<uint16_t>(Priority::Stub);
diff --git a/drape_frontend/transit_scheme_renderer.cpp b/drape_frontend/transit_scheme_renderer.cpp
index 93fd5ea865..c41dd20ee5 100644
--- a/drape_frontend/transit_scheme_renderer.cpp
+++ b/drape_frontend/transit_scheme_renderer.cpp
@@ -175,7 +175,6 @@ void TransitSchemeRenderer::RemoveOverlays(ref_ptr<dp::OverlayTree> tree, std::v
void TransitSchemeRenderer::RenderLinesCaps(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng,
FrameValues const & frameValues, float pixelHalfWidth)
{
- GLFunctions::glEnable(gl_const::GLDepthTest);
GLFunctions::glClear(gl_const::GLDepthBit);
for (auto & renderData : m_linesCapsRenderData)
{
@@ -198,7 +197,6 @@ void TransitSchemeRenderer::RenderLinesCaps(ScreenBase const & screen, ref_ptr<g
void TransitSchemeRenderer::RenderLines(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng,
FrameValues const & frameValues, float pixelHalfWidth)
{
- GLFunctions::glEnable(gl_const::GLDepthTest);
for (auto & renderData : m_linesRenderData)
{
ref_ptr<dp::GpuProgram> program = mng->GetProgram(renderData.m_state.GetProgram<gpu::Program>());
@@ -219,7 +217,6 @@ void TransitSchemeRenderer::RenderLines(ScreenBase const & screen, ref_ptr<gpu::
void TransitSchemeRenderer::RenderMarkers(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng,
FrameValues const & frameValues, float pixelHalfWidth)
{
- GLFunctions::glEnable(gl_const::GLDepthTest);
GLFunctions::glClear(gl_const::GLDepthBit);
for (auto & renderData : m_markersRenderData)
{
@@ -243,7 +240,6 @@ void TransitSchemeRenderer::RenderMarkers(ScreenBase const & screen, ref_ptr<gpu
void TransitSchemeRenderer::RenderText(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng,
FrameValues const & frameValues)
{
- GLFunctions::glDisable(gl_const::GLDepthTest);
auto const & glyphParams = df::VisualParams::Instance().GetGlyphVisualParams();
for (auto & renderData : m_textRenderData)
{
@@ -286,7 +282,6 @@ void TransitSchemeRenderer::RenderStubs(ScreenBase const & screen, ref_ptr<gpu::
params.m_modelView = glsl::make_mat4(mv.m_data);
mng->GetParamsSetter()->Apply(program, params);
- GLFunctions::glEnable(gl_const::GLDepthTest);
renderData.m_bucket->Render(false /* draw as line */);
renderData.m_bucket->RenderDebug(screen);
diff --git a/drape_frontend/user_mark_shapes.cpp b/drape_frontend/user_mark_shapes.cpp
index b3338de24b..f667a1fa5b 100644
--- a/drape_frontend/user_mark_shapes.cpp
+++ b/drape_frontend/user_mark_shapes.cpp
@@ -125,6 +125,7 @@ void GenerateColoredSymbolShapes(UserMarkRenderParams const & renderInfo, TileKe
params.m_featureID = renderInfo.m_featureId;
params.m_tileCenter = tileCenter;
+ params.m_depthTestEnabled = renderInfo.m_depthTestEnabled;
params.m_depth = renderInfo.m_depth;
params.m_depthLayer = renderInfo.m_depthLayer;
params.m_minVisibleScale = renderInfo.m_minZoom;
@@ -155,6 +156,7 @@ void GeneratePoiSymbolShape(UserMarkRenderParams const & renderInfo, TileKey con
{
PoiSymbolViewParams params(renderInfo.m_featureId);
params.m_tileCenter = tileCenter;
+ params.m_depthTestEnabled = renderInfo.m_depthTestEnabled;
params.m_depth = renderInfo.m_depth;
params.m_depthLayer = renderInfo.m_depthLayer;
params.m_minVisibleScale = renderInfo.m_minZoom;
@@ -211,6 +213,7 @@ void GenerateTextShapes(UserMarkRenderParams const & renderInfo, TileKey const &
params.m_titleDecl.m_secondaryTextFont.m_isSdf =
params.m_titleDecl.m_secondaryTextFont.m_outlineColor != dp::Color::Transparent() ? true : isSdf;
+ params.m_depthTestEnabled = renderInfo.m_depthTestEnabled;
params.m_depth = renderInfo.m_depth;
params.m_depthLayer = renderInfo.m_depthLayer;
params.m_minVisibleScale = renderInfo.m_minZoom;
@@ -298,6 +301,7 @@ void CacheUserMarks(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture
dp::TextureManager::SymbolRegion region;
dp::TextureManager::SymbolRegion backgroundRegion;
RenderState::DepthLayer depthLayer = RenderState::UserMarkLayer;
+ bool depthTestEnabled = true;
for (auto const id : marksId)
{
auto const it = renderParams.find(id);
@@ -310,6 +314,7 @@ void CacheUserMarks(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture
m2::PointD const tileCenter = tileKey.GetGlobalRect().Center();
depthLayer = renderInfo.m_depthLayer;
+ depthTestEnabled = renderInfo.m_depthTestEnabled;
m2::PointF symbolSize(0.0f, 0.0f);
m2::PointF symbolOffset(0.0f, 0.0f);
@@ -410,6 +415,7 @@ void CacheUserMarks(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture
: gpu::Program::BookmarkBillboard);
state.SetColorTexture(region.GetTexture());
state.SetTextureFilter(gl_const::GLNearest);
+ state.SetDepthTestEnabled(depthTestEnabled);
dp::AttributeProvider attribProvider(1, static_cast<uint32_t>(buffer.size()));
attribProvider.InitStream(0, UPV::GetBinding(), make_ref(buffer.data()));
@@ -505,6 +511,7 @@ void CacheUserLines(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture
params.m_cap = dp::RoundCap;
params.m_join = dp::RoundJoin;
params.m_color = layer.m_color;
+ params.m_depthTestEnabled = true;
params.m_depth = layer.m_depth;
params.m_depthLayer = renderInfo.m_depthLayer;
params.m_width = static_cast<float>(layer.m_width * vs *
diff --git a/drape_frontend/user_mark_shapes.hpp b/drape_frontend/user_mark_shapes.hpp
index 96616a015f..716e2f7145 100644
--- a/drape_frontend/user_mark_shapes.hpp
+++ b/drape_frontend/user_mark_shapes.hpp
@@ -31,6 +31,7 @@ struct UserMarkRenderParams
bool m_hasTitlePriority = false;
uint16_t m_priority = 0;
uint32_t m_index = 0;
+ bool m_depthTestEnabled = true;
float m_depth = 0.0;
RenderState::DepthLayer m_depthLayer = RenderState::UserMarkLayer;
bool m_hasCreationAnimation = false;
diff --git a/drape_frontend/user_marks_provider.hpp b/drape_frontend/user_marks_provider.hpp
index c9d8aff872..b4933a4baf 100644
--- a/drape_frontend/user_marks_provider.hpp
+++ b/drape_frontend/user_marks_provider.hpp
@@ -55,6 +55,7 @@ public:
virtual m2::PointD const & GetPivot() const = 0;
virtual m2::PointD GetPixelOffset() const = 0;
virtual dp::Anchor GetAnchor() const = 0;
+ virtual bool GetDepthTestEnabled() const = 0;
virtual float GetDepth() const = 0;
virtual RenderState::DepthLayer GetDepthLayer() const = 0;
virtual bool IsVisible() const = 0;
diff --git a/map/search_mark.hpp b/map/search_mark.hpp
index 74f4212de4..8d28513630 100644
--- a/map/search_mark.hpp
+++ b/map/search_mark.hpp
@@ -42,6 +42,7 @@ public:
df::RenderState::DepthLayer GetDepthLayer() const override;
drape_ptr<SymbolNameZoomInfo> GetBadgeNames() const override;
drape_ptr<SymbolOffsets> GetSymbolOffsets() const override;
+ bool GetDepthTestEnabled() const override { return false; }
FeatureID GetFeatureID() const override { return m_featureID; }
void SetFoundFeature(FeatureID const & feature);
diff --git a/map/user_mark.hpp b/map/user_mark.hpp
index e429901642..f4dced339f 100644
--- a/map/user_mark.hpp
+++ b/map/user_mark.hpp
@@ -59,6 +59,7 @@ public:
m2::PointD const & GetPivot() const override;
m2::PointD GetPixelOffset() const override;
dp::Anchor GetAnchor() const override;
+ bool GetDepthTestEnabled() const override { return true; }
float GetDepth() const override { return 0.0f; }
df::RenderState::DepthLayer GetDepthLayer() const override;
drape_ptr<TitlesInfo> GetTitleDecl() const override { return nullptr; }