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_frontend/drape_engine.cpp6
-rwxr-xr-xdrape_frontend/frontend_renderer.cpp3
-rw-r--r--drape_frontend/user_mark_shapes.cpp28
-rw-r--r--drape_frontend/user_mark_shapes.hpp1
-rw-r--r--drape_frontend/user_marks_provider.hpp3
-rw-r--r--map/guides_marks.cpp31
-rw-r--r--map/guides_marks.hpp10
-rw-r--r--map/user_mark.hpp2
-rw-r--r--shaders/GL/user_mark.vsh.glsl9
-rw-r--r--shaders/GL/user_mark_billboard.vsh.glsl11
-rw-r--r--shaders/Metal/map.metal19
11 files changed, 60 insertions, 63 deletions
diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp
index a90bb180e8..1efedb6852 100644
--- a/drape_frontend/drape_engine.cpp
+++ b/drape_frontend/drape_engine.cpp
@@ -914,7 +914,11 @@ 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();
+ if (mark->GetDepth() != UserPointMark::kInvalidDepth)
+ {
+ renderInfo->m_depth = mark->GetDepth();
+ renderInfo->m_customDepth = true;
+ }
renderInfo->m_depthLayer = mark->GetDepthLayer();
renderInfo->m_minZoom = mark->GetMinZoom();
renderInfo->m_minTitleZoom = mark->GetMinTitleZoom();
diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp
index b690123d5a..7de217719b 100755
--- a/drape_frontend/frontend_renderer.cpp
+++ b/drape_frontend/frontend_renderer.cpp
@@ -1866,8 +1866,7 @@ void FrontendRenderer::BuildOverlayTree(ScreenBase const & modelView)
DepthLayer::LocalAdsMarkLayer,
DepthLayer::NavigationLayer,
DepthLayer::RoutingBottomMarkLayer,
- DepthLayer::RoutingMarkLayer,
- DepthLayer::GuidesBottomMarkLayer};
+ DepthLayer::RoutingMarkLayer};
BeginUpdateOverlayTree(modelView);
for (auto const & layerId : layers)
{
diff --git a/drape_frontend/user_mark_shapes.cpp b/drape_frontend/user_mark_shapes.cpp
index 1438a9b542..47bca8c8d9 100644
--- a/drape_frontend/user_mark_shapes.cpp
+++ b/drape_frontend/user_mark_shapes.cpp
@@ -84,7 +84,8 @@ struct UserPointVertex : public gpu::BaseVertex
offset += dp::FillDecl<TPosition, UserPointVertex>(0, "a_position", info, offset);
offset += dp::FillDecl<TNormal, UserPointVertex>(1, "a_normal", info, offset);
offset += dp::FillDecl<TTexCoord, UserPointVertex>(2, "a_texCoords", info, offset);
- offset += dp::FillDecl<TColorAndAnimate, UserPointVertex>(3, "a_colorAndAnimate", info, offset);
+ offset += dp::FillDecl<TColorAndAnimate, UserPointVertex>(3, "a_colorAndAnimateOrZ", info,
+ offset);
return info;
}
@@ -421,8 +422,6 @@ void CacheUserMarks(ref_ptr<dp::GraphicsContext> context, TileKey const & tileKe
m2::PointD const pixelOffset = renderInfo.m_pixelOffset;
glsl::vec2 const offset(pixelOffset.x, pixelOffset.y);
- up += offset;
- down += offset;
dp::Color color = dp::Color::White();
if (!renderInfo.m_color.empty())
@@ -430,17 +429,24 @@ void CacheUserMarks(ref_ptr<dp::GraphicsContext> context, TileKey const & tileKe
glsl::vec4 colorAndAnimate(color.GetRedF(), color.GetGreenF(), color.GetBlueF(),
runAnim ? 1.0f : -1.0f);
- buffer.emplace_back(pos, left + down,
- glsl::ToVec4(m2::PointD(texRect.LeftTop()), m2::PointD(bgTexRect.LeftTop())),
+ if (renderInfo.m_customDepth)
+ colorAndAnimate.w = 0.0f;
+
+ buffer.emplace_back(pos, left + down + offset,
+ glsl::ToVec4(m2::PointD(texRect.LeftTop()),
+ m2::PointD(bgTexRect.LeftTop())),
colorAndAnimate);
- buffer.emplace_back(pos, left + up,
- glsl::ToVec4(m2::PointD(texRect.LeftBottom()), m2::PointD(bgTexRect.LeftBottom())),
+ buffer.emplace_back(pos, left + up + offset,
+ glsl::ToVec4(m2::PointD(texRect.LeftBottom()),
+ m2::PointD(bgTexRect.LeftBottom())),
colorAndAnimate);
- buffer.emplace_back(pos, right + down,
- glsl::ToVec4(m2::PointD(texRect.RightTop()), m2::PointD(bgTexRect.RightTop())),
+ buffer.emplace_back(pos, right + down + offset,
+ glsl::ToVec4(m2::PointD(texRect.RightTop()),
+ m2::PointD(bgTexRect.RightTop())),
colorAndAnimate);
- buffer.emplace_back(pos, right + up,
- glsl::ToVec4(m2::PointD(texRect.RightBottom()), m2::PointD(bgTexRect.RightBottom())),
+ buffer.emplace_back(pos, right + up + offset,
+ glsl::ToVec4(m2::PointD(texRect.RightBottom()),
+ m2::PointD(bgTexRect.RightBottom())),
colorAndAnimate);
gpu::Program program;
diff --git a/drape_frontend/user_mark_shapes.hpp b/drape_frontend/user_mark_shapes.hpp
index 37b2ed1287..c19a9f571b 100644
--- a/drape_frontend/user_mark_shapes.hpp
+++ b/drape_frontend/user_mark_shapes.hpp
@@ -35,6 +35,7 @@ struct UserMarkRenderParams
uint32_t m_index = 0;
bool m_depthTestEnabled = true;
float m_depth = 0.0;
+ bool m_customDepth = false;
DepthLayer m_depthLayer = DepthLayer::UserMarkLayer;
bool m_hasCreationAnimation = false;
bool m_justCreated = false;
diff --git a/drape_frontend/user_marks_provider.hpp b/drape_frontend/user_marks_provider.hpp
index 15bad85ca1..48e0c7e7fd 100644
--- a/drape_frontend/user_marks_provider.hpp
+++ b/drape_frontend/user_marks_provider.hpp
@@ -6,6 +6,7 @@
#include "drape/drape_global.hpp"
#include "drape/pointers.hpp"
+#include "drape/utils/projection.hpp"
#include "kml/type_utils.hpp"
@@ -49,6 +50,8 @@ public:
using SymbolSizes = std::vector<m2::PointF>;
using SymbolOffsets = std::vector<m2::PointF>;
+ static float constexpr kInvalidDepth = dp::kMinDepth - 1.0;
+
explicit UserPointMark(kml::MarkId id);
virtual ~UserPointMark() = default;
diff --git a/map/guides_marks.cpp b/map/guides_marks.cpp
index 031acd1aae..4628c6bda3 100644
--- a/map/guides_marks.cpp
+++ b/map/guides_marks.cpp
@@ -17,9 +17,8 @@ float constexpr kGuideMarkSize = 26.0f;
float constexpr kGuideMarkTextSize = 14.0f;
float constexpr kGuideMarkRadius = 4.0f;
float constexpr kGuideSelectionWidth = 10.0f;
-m2::PointF const kGuideMarkOffset = {0.0f, 2.0f};
-m2::PointF const kGuideDownloadedMarkOffset = {1.5f, 0.5f};
-m2::PointF const kGuideClusterTextOffset = {0.0f, kGuideMarkTextSize + kGuideMarkSize / 2.0f};
+m2::PointD const kGuideMarkOffset = {0.0, 0.0};
+m2::PointD const kGuideDownloadedMarkOffset = {1.5, -1.5};
int constexpr kMinGuideMarkerZoom = 1;
} // namespace
@@ -32,10 +31,6 @@ GuideMark::GuideMark(m2::PointD const & ptOrg)
void GuideMark::Update()
{
- auto const vs = static_cast<float>(df::VisualParams::Instance().GetVisualScale());
- m_symbolOffsets = SymbolOffsets(scales::UPPER_STYLE_SCALE,
- m_isDownloaded ? kGuideDownloadedMarkOffset * vs
- : kGuideMarkOffset * vs);
if (m_type == Type::City)
{
m_symbolInfo[kMinGuideMarkerZoom] = m_isDownloaded ? "guide_city_downloaded"
@@ -48,6 +43,12 @@ void GuideMark::Update()
}
}
+m2::PointD GuideMark::GetPixelOffset() const
+{
+ auto const vs = static_cast<float>(df::VisualParams::Instance().GetVisualScale());
+ return m_isDownloaded ? kGuideDownloadedMarkOffset * vs : kGuideMarkOffset * vs;
+}
+
void GuideMark::SetGuideType(Type type)
{
SetDirty();
@@ -79,11 +80,6 @@ drape_ptr<df::UserPointMark::SymbolNameZoomInfo> GuideMark::GetSymbolNames() con
return make_unique_dp<SymbolNameZoomInfo>(m_symbolInfo);
}
-drape_ptr<df::UserPointMark::SymbolOffsets> GuideMark::GetSymbolOffsets() const
-{
- return make_unique_dp<SymbolOffsets>(m_symbolOffsets);
-}
-
GuidesClusterMark::GuidesClusterMark(m2::PointD const & ptOrg)
: UserMark(ptOrg, UserMark::GUIDE_CLUSTER)
{
@@ -98,9 +94,6 @@ void GuidesClusterMark::SetDepth(float depth)
void GuidesClusterMark::Update()
{
- auto const vs = static_cast<float>(df::VisualParams::Instance().GetVisualScale());
- m_symbolOffsets = SymbolOffsets(scales::UPPER_STYLE_SCALE, kGuideMarkOffset * vs);
-
auto const isCity = m_outdoorGuidesCount < m_cityGuidesCount;
auto const totalCount = m_outdoorGuidesCount + m_cityGuidesCount;
auto const bigCluster = totalCount > 99;
@@ -118,9 +111,8 @@ void GuidesClusterMark::Update()
m_titleDecl.m_primaryTextFont.m_color = df::GetColorConstant(isCity ? kCityMarkTextColor
: kOutdoorMarkTextColor);
m_titleDecl.m_primaryTextFont.m_size = kGuideMarkTextSize;
- m_titleDecl.m_anchor = dp::Bottom;
+ m_titleDecl.m_anchor = dp::Center;
m_titleDecl.m_primaryText = bigCluster ? "99+" : strings::to_string(totalCount);
- m_titleDecl.m_primaryOffset = kGuideClusterTextOffset - kGuideMarkOffset * 2.0f;
}
void GuidesClusterMark::SetGuidesCount(uint32_t cityGuidesCount, uint32_t outdoorGuidesCount)
@@ -136,11 +128,6 @@ drape_ptr<df::UserPointMark::SymbolNameZoomInfo> GuidesClusterMark::GetSymbolNam
return make_unique_dp<SymbolNameZoomInfo>(m_symbolInfo);
}
-drape_ptr<df::UserPointMark::SymbolOffsets> GuidesClusterMark::GetSymbolOffsets() const
-{
- return make_unique_dp<SymbolOffsets>(m_symbolOffsets);
-}
-
drape_ptr<df::UserPointMark::TitlesInfo> GuidesClusterMark::GetTitleDecl() const
{
auto titleInfo = make_unique_dp<TitlesInfo>();
diff --git a/map/guides_marks.hpp b/map/guides_marks.hpp
index f26214a358..ed2cec5c71 100644
--- a/map/guides_marks.hpp
+++ b/map/guides_marks.hpp
@@ -28,8 +28,7 @@ public:
float GetDepth() const override { return m_depth; }
df::DepthLayer GetDepthLayer() const override { return df::DepthLayer::GuidesMarkLayer; }
drape_ptr<SymbolNameZoomInfo> GetSymbolNames() const override;
- drape_ptr<SymbolOffsets> GetSymbolOffsets() const override;
- bool SymbolIsPOI() const override { return true; }
+ m2::PointD GetPixelOffset() const override;
private:
void Update();
@@ -41,7 +40,6 @@ private:
bool m_isDownloaded = false;
SymbolNameZoomInfo m_symbolInfo;
- SymbolOffsets m_symbolOffsets;
};
class GuidesClusterMark : public UserMark
@@ -56,24 +54,18 @@ public:
// df::UserPointMark overrides.
float GetDepth() const override { return m_depth; }
df::DepthLayer GetDepthLayer() const override { return df::DepthLayer::GuidesMarkLayer; }
- bool SymbolIsPOI() const override { return true; }
drape_ptr<SymbolNameZoomInfo> GetSymbolNames() const override;
- drape_ptr<SymbolOffsets> GetSymbolOffsets() const override;
-
- bool HasTitlePriority() const override { return true; }
drape_ptr<TitlesInfo> GetTitleDecl() const override;
private:
void Update();
float m_depth = 0.0f;
- uint32_t m_index = 0;
uint32_t m_cityGuidesCount = 0;
uint32_t m_outdoorGuidesCount = 0;
SymbolNameZoomInfo m_symbolInfo;
- SymbolOffsets m_symbolOffsets;
dp::TitleDecl m_titleDecl;
};
diff --git a/map/user_mark.hpp b/map/user_mark.hpp
index 5b386466d2..841d00543e 100644
--- a/map/user_mark.hpp
+++ b/map/user_mark.hpp
@@ -74,7 +74,7 @@ public:
m2::PointD GetPixelOffset() const override { return {}; }
dp::Anchor GetAnchor() const override { return dp::Center; }
bool GetDepthTestEnabled() const override { return true; }
- float GetDepth() const override { return 0.0f; }
+ float GetDepth() const override { return kInvalidDepth; }
df::DepthLayer GetDepthLayer() const override { return df::DepthLayer::UserMarkLayer; }
drape_ptr<TitlesInfo> GetTitleDecl() const override { return nullptr; }
drape_ptr<ColoredSymbolZoomInfo> GetColoredSymbols() const override { return nullptr; }
diff --git a/shaders/GL/user_mark.vsh.glsl b/shaders/GL/user_mark.vsh.glsl
index 25d6252054..87f54c5905 100644
--- a/shaders/GL/user_mark.vsh.glsl
+++ b/shaders/GL/user_mark.vsh.glsl
@@ -1,7 +1,7 @@
attribute vec3 a_position;
attribute vec2 a_normal;
attribute vec4 a_texCoords;
-attribute vec4 a_colorAndAnimate;
+attribute vec4 a_colorAndAnimateOrZ;
uniform mat4 u_modelView;
uniform mat4 u_projection;
@@ -14,14 +14,15 @@ varying vec3 v_maskColor;
void main()
{
vec2 normal = a_normal;
- if (a_colorAndAnimate.w > 0.0)
+ if (a_colorAndAnimateOrZ.w > 0.0)
normal = u_interpolation * normal;
vec4 p = vec4(a_position, 1.0) * u_modelView;
vec4 pos = vec4(normal, 0.0, 0.0) + p;
vec4 projectedPivot = p * u_projection;
gl_Position = applyPivotTransform(pos * u_projection, u_pivotTransform, 0.0);
- gl_Position.z = projectedPivot.y / projectedPivot.w * 0.5 + 0.5;
+ float newZ = projectedPivot.y / projectedPivot.w * 0.5 + 0.5;
+ gl_Position.z = abs(a_colorAndAnimateOrZ.w) * newZ + (1.0 - abs(a_colorAndAnimateOrZ.w)) * gl_Position.z;
v_texCoords = a_texCoords;
- v_maskColor = a_colorAndAnimate.rgb;
+ v_maskColor = a_colorAndAnimateOrZ.rgb;
}
diff --git a/shaders/GL/user_mark_billboard.vsh.glsl b/shaders/GL/user_mark_billboard.vsh.glsl
index a15f9a3137..e77fb958cd 100644
--- a/shaders/GL/user_mark_billboard.vsh.glsl
+++ b/shaders/GL/user_mark_billboard.vsh.glsl
@@ -1,7 +1,7 @@
attribute vec3 a_position;
attribute vec2 a_normal;
attribute vec4 a_texCoords;
-attribute vec4 a_colorAndAnimate;
+attribute vec4 a_colorAndAnimateOrZ;
uniform mat4 u_modelView;
uniform mat4 u_projection;
@@ -14,14 +14,15 @@ varying vec3 v_maskColor;
void main()
{
vec2 normal = a_normal;
- if (a_colorAndAnimate.w > 0.0)
+ if (a_colorAndAnimateOrZ.w > 0.0)
normal = u_interpolation * normal;
- vec4 pivot = vec4(a_position.xyz, 1.0) * u_modelView;
+ vec4 pivot = vec4(a_position, 1.0) * u_modelView;
vec4 offset = vec4(normal, 0.0, 0.0) * u_projection;
vec4 projectedPivot = pivot * u_projection;
gl_Position = applyBillboardPivotTransform(projectedPivot, u_pivotTransform, 0.0, offset.xy);
- gl_Position.z = projectedPivot.y / projectedPivot.w * 0.5 + 0.5;
+ float newZ = projectedPivot.y / projectedPivot.w * 0.5 + 0.5;
+ gl_Position.z = abs(a_colorAndAnimateOrZ.w) * newZ + (1.0 - abs(a_colorAndAnimateOrZ.w)) * gl_Position.z;
v_texCoords = a_texCoords;
- v_maskColor = a_colorAndAnimate.rgb;
+ v_maskColor = a_colorAndAnimateOrZ.rgb;
}
diff --git a/shaders/Metal/map.metal b/shaders/Metal/map.metal
index ddfd131cf0..ca20d105b6 100644
--- a/shaders/Metal/map.metal
+++ b/shaders/Metal/map.metal
@@ -758,7 +758,7 @@ typedef struct
float3 a_position [[attribute(0)]];
float2 a_normal [[attribute(1)]];
float4 a_texCoords [[attribute(2)]];
- float4 a_colorAndAnimate [[attribute(3)]];
+ float4 a_colorAndAnimateOrZ [[attribute(3)]];
} UserMarkVertex_T;
typedef struct
@@ -780,16 +780,18 @@ vertex UserMarkFragment_T vsUserMark(const UserMarkVertex_T in [[stage_in]],
UserMarkFragment_T out;
float2 normal = in.a_normal;
- if (in.a_colorAndAnimate.w > 0.0)
+ if (in.a_colorAndAnimateOrZ.w > 0.0)
normal = uniforms.u_interpolation * normal;
float4 p = float4(in.a_position, 1.0) * uniforms.u_modelView;
float4 pos = float4(normal, 0.0, 0.0) + p;
float4 projectedPivot = p * uniforms.u_projection;
out.position = ApplyPivotTransform(pos * uniforms.u_projection, uniforms.u_pivotTransform, 0.0);
- out.position.z = projectedPivot.y / projectedPivot.w * 0.5 + 0.5;
+ float newZ = projectedPivot.y / projectedPivot.w * 0.5 + 0.5;
+ out.position.z = abs(in.a_colorAndAnimateOrZ.w) * newZ + (1.0 - abs(in.a_colorAndAnimateOrZ.w)) * out.position.z;
+
out.texCoords = in.a_texCoords;
- out.maskColor = in.a_colorAndAnimate.rgb;
+ out.maskColor = in.a_colorAndAnimateOrZ.rgb;
return out;
}
@@ -800,17 +802,18 @@ vertex UserMarkFragment_T vsUserMarkBillboard(const UserMarkVertex_T in [[stage_
UserMarkFragment_T out;
float2 normal = in.a_normal;
- if (in.a_colorAndAnimate.w > 0.0)
+ if (in.a_colorAndAnimateOrZ.w > 0.0)
normal = uniforms.u_interpolation * normal;
float4 pivot = float4(in.a_position.xyz, 1.0) * uniforms.u_modelView;
float4 offset = float4(normal, 0.0, 0.0) * uniforms.u_projection;
float4 projectedPivot = pivot * uniforms.u_projection;
out.position = ApplyBillboardPivotTransform(projectedPivot, uniforms.u_pivotTransform, 0.0, offset.xy);
- out.position.z = projectedPivot.y / projectedPivot.w * 0.5 + 0.5;
-
+ float newZ = projectedPivot.y / projectedPivot.w * 0.5 + 0.5;
+ out.position.z = abs(in.a_colorAndAnimateOrZ.w) * newZ + (1.0 - abs(in.a_colorAndAnimateOrZ.w)) * out.position.z;
+
out.texCoords = in.a_texCoords;
- out.maskColor = in.a_colorAndAnimate.rgb;
+ out.maskColor = in.a_colorAndAnimateOrZ.rgb;
return out;
}