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:
authorr.kuznetsov <r.kuznetsov@corp.mail.ru>2018-03-26 16:32:12 +0300
committerDaria Volvenkova <d.volvenkova@corp.mail.ru>2018-03-26 16:49:20 +0300
commit62715ae1cd0f28cb2d027550106a99474a557378 (patch)
tree90f24bf21e772d36acd75aca8127138287ad13e3
parent7cfa895666d98e2a8d7773f172027062547b4d71 (diff)
Added new bookmarks rendering
-rw-r--r--drape/glsl_types.hpp5
-rw-r--r--drape/texture_manager.cpp12
-rw-r--r--drape/texture_manager.hpp1
-rw-r--r--drape_frontend/CMakeLists.txt2
-rw-r--r--drape_frontend/drape_engine.cpp1
-rw-r--r--drape_frontend/shaders/shader_index.txt8
-rw-r--r--drape_frontend/shaders/user_mark.fsh.glsl (renamed from drape_frontend/shaders/discarded_texturing.fsh.glsl)9
-rw-r--r--drape_frontend/shaders/user_mark.vsh.glsl16
-rw-r--r--drape_frontend/shaders/user_mark_billboard.vsh.glsl12
-rw-r--r--drape_frontend/user_mark_shapes.cpp420
-rw-r--r--drape_frontend/user_mark_shapes.hpp1
-rw-r--r--drape_frontend/user_marks_provider.hpp15
-rw-r--r--map/bookmark.cpp29
-rw-r--r--map/bookmark.hpp1
-rw-r--r--map/user_mark.hpp1
-rw-r--r--xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj28
16 files changed, 352 insertions, 209 deletions
diff --git a/drape/glsl_types.hpp b/drape/glsl_types.hpp
index a4ba6b65c6..65992ed025 100644
--- a/drape/glsl_types.hpp
+++ b/drape/glsl_types.hpp
@@ -71,6 +71,11 @@ inline vec4 ToVec4(dp::Color const & color)
double(color.GetAlpha()) / 255);
}
+inline vec4 ToVec4(m2::PointD const & pt1, m2::PointD const & pt2)
+{
+ return glsl::vec4(pt1.x, pt1.y, pt2.x, pt2.y);
+}
+
template <typename T, typename = std::enable_if_t<std::is_integral<T>::value ||
std::is_floating_point<T>::value>>
inline uint8_t GetArithmeticComponentCount()
diff --git a/drape/texture_manager.cpp b/drape/texture_manager.cpp
index e366b6393a..31d1e67013 100644
--- a/drape/texture_manager.cpp
+++ b/drape/texture_manager.cpp
@@ -581,6 +581,18 @@ void TextureManager::GetSymbolRegion(string const & symbolName, SymbolRegion & r
LOG(LWARNING, ("Detected using of unknown symbol ", symbolName));
}
+bool TextureManager::HasSymbolRegion(std::string const & symbolName) const
+{
+ for (size_t i = 0; i < m_symbolTextures.size(); ++i)
+ {
+ ASSERT(m_symbolTextures[i] != nullptr, ());
+ ref_ptr<SymbolsTexture> symbolsTexture = make_ref(m_symbolTextures[i]);
+ if (symbolsTexture->IsSymbolContained(symbolName))
+ return true;
+ }
+ return false;
+}
+
void TextureManager::GetStippleRegion(TStipplePattern const & pen, StippleRegion & region)
{
GetRegionBase(make_ref(m_stipplePenTexture), region, StipplePenKey(pen));
diff --git a/drape/texture_manager.hpp b/drape/texture_manager.hpp
index 888fa07eae..e7a9675085 100644
--- a/drape/texture_manager.hpp
+++ b/drape/texture_manager.hpp
@@ -86,6 +86,7 @@ public:
void OnSwitchMapStyle();
void GetSymbolRegion(std::string const & symbolName, SymbolRegion & region);
+ bool HasSymbolRegion(std::string const & symbolName) const;
typedef buffer_vector<uint8_t, 8> TStipplePattern;
void GetStippleRegion(TStipplePattern const & pen, StippleRegion & region);
diff --git a/drape_frontend/CMakeLists.txt b/drape_frontend/CMakeLists.txt
index 47a7054a3f..ca06c792ad 100644
--- a/drape_frontend/CMakeLists.txt
+++ b/drape_frontend/CMakeLists.txt
@@ -242,7 +242,6 @@ set(
shaders/dashed_line.vsh.glsl
shaders/debug_rect.fsh.glsl
shaders/debug_rect.vsh.glsl
- shaders/discarded_texturing.fsh.glsl
shaders/hatching_area.fsh.glsl
shaders/hatching_area.vsh.glsl
shaders/line.fsh.glsl
@@ -287,6 +286,7 @@ set(
shaders/traffic.vsh.glsl
shaders/traffic_line.fsh.glsl
shaders/traffic_line.vsh.glsl
+ shaders/user_mark.fsh.glsl
shaders/user_mark.vsh.glsl
shaders/user_mark_billboard.vsh.glsl
)
diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp
index 79d2d5f711..e1138d65ba 100644
--- a/drape_frontend/drape_engine.cpp
+++ b/drape_frontend/drape_engine.cpp
@@ -810,6 +810,7 @@ drape_ptr<UserMarkRenderParams> DrapeEngine::GenerateMarkRenderInfo(UserPointMar
renderInfo->m_coloredSymbols = mark->GetColoredSymbols();
renderInfo->m_symbolSizes = mark->GetSymbolSizes();
renderInfo->m_symbolOffsets = mark->GetSymbolOffsets();
+ renderInfo->m_color = mark->GetColor();
renderInfo->m_hasSymbolPriority = mark->HasSymbolPriority();
renderInfo->m_hasTitlePriority = mark->HasTitlePriority();
renderInfo->m_priority = mark->GetPriority();
diff --git a/drape_frontend/shaders/shader_index.txt b/drape_frontend/shaders/shader_index.txt
index 2541fb8f58..966eec41b7 100644
--- a/drape_frontend/shaders/shader_index.txt
+++ b/drape_frontend/shaders/shader_index.txt
@@ -18,8 +18,8 @@ TEXTURING_GUI_PROGRAM texturing_gui.vsh.glsl texturing.fsh.glsl
RULER_PROGRAM ruler.vsh.glsl texturing.fsh.glsl
ACCURACY_PROGRAM position_accuracy3d.vsh.glsl texturing.fsh.glsl
MY_POSITION_PROGRAM my_position.vsh.glsl texturing.fsh.glsl
-BOOKMARK_PROGRAM user_mark.vsh.glsl discarded_texturing.fsh.glsl
-BOOKMARK_ANIM_PROGRAM user_mark.vsh.glsl discarded_texturing.fsh.glsl
+BOOKMARK_PROGRAM user_mark.vsh.glsl user_mark.fsh.glsl
+BOOKMARK_ANIM_PROGRAM user_mark.vsh.glsl user_mark.fsh.glsl
ROUTE_PROGRAM route.vsh.glsl route.fsh.glsl
ROUTE_DASH_PROGRAM route.vsh.glsl route_dash.fsh.glsl
ROUTE_ARROW_PROGRAM route_arrow.vsh.glsl route_arrow.fsh.glsl
@@ -36,8 +36,8 @@ MASKED_TEXTURING_BILLBOARD_PROGRAM masked_texturing_billboard.vsh.glsl masked_te
TEXT_OUTLINED_BILLBOARD_PROGRAM text_outlined_billboard.vsh.glsl text.fsh.glsl
TEXT_BILLBOARD_PROGRAM text_billboard.vsh.glsl text.fsh.glsl
TEXT_FIXED_BILLBOARD_PROGRAM text_billboard.vsh.glsl text_fixed.fsh.glsl
-BOOKMARK_BILLBOARD_PROGRAM user_mark_billboard.vsh.glsl discarded_texturing.fsh.glsl
-BOOKMARK_ANIM_BILLBOARD_PROGRAM user_mark_billboard.vsh.glsl discarded_texturing.fsh.glsl
+BOOKMARK_BILLBOARD_PROGRAM user_mark_billboard.vsh.glsl user_mark.fsh.glsl
+BOOKMARK_ANIM_BILLBOARD_PROGRAM user_mark_billboard.vsh.glsl user_mark.fsh.glsl
TRAFFIC_PROGRAM traffic.vsh.glsl traffic.fsh.glsl
TRAFFIC_LINE_PROGRAM traffic_line.vsh.glsl traffic_line.fsh.glsl
SMAA_EDGES_PROGRAM smaa_edges.vsh.glsl smaa_edges.fsh.glsl
diff --git a/drape_frontend/shaders/discarded_texturing.fsh.glsl b/drape_frontend/shaders/user_mark.fsh.glsl
index e146c2a18b..f1c11b17ad 100644
--- a/drape_frontend/shaders/discarded_texturing.fsh.glsl
+++ b/drape_frontend/shaders/user_mark.fsh.glsl
@@ -5,12 +5,15 @@
uniform sampler2D u_colorTex;
uniform float u_opacity;
-varying vec2 v_colorTexCoords;
+varying vec4 v_texCoords;
+varying vec3 v_maskColor;
void main()
{
- vec4 finalColor = texture2D(u_colorTex, v_colorTexCoords);
- finalColor.a *= u_opacity;
+ vec4 color = texture2D(u_colorTex, v_texCoords.xy);
+ vec4 bgColor = texture2D(u_colorTex, v_texCoords.zw) * vec4(v_maskColor, 1.0);
+ vec4 finalColor = mix(color, mix(bgColor, color, color.a), bgColor.a);
+ finalColor.a = clamp(color.a + bgColor.a, 0.0, 1.0) * u_opacity;
if (finalColor.a < 0.01)
discard;
gl_FragColor = finalColor;
diff --git a/drape_frontend/shaders/user_mark.vsh.glsl b/drape_frontend/shaders/user_mark.vsh.glsl
index 9fb0bd665c..6852b81506 100644
--- a/drape_frontend/shaders/user_mark.vsh.glsl
+++ b/drape_frontend/shaders/user_mark.vsh.glsl
@@ -1,25 +1,27 @@
attribute vec3 a_position;
attribute vec2 a_normal;
-attribute vec2 a_colorTexCoords;
-attribute float a_animate;
+attribute vec4 a_texCoords;
+attribute vec4 a_colorAndAnimate;
uniform mat4 modelView;
uniform mat4 projection;
uniform mat4 pivotTransform;
uniform float u_interpolationT;
-varying vec2 v_colorTexCoords;
+varying vec4 v_texCoords;
+varying vec3 v_maskColor;
void main()
{
vec2 normal = a_normal;
- if (a_animate > 0.0)
+ if (a_colorAndAnimate.w > 0.0)
normal = u_interpolationT * normal;
- vec4 p = vec4(a_position, 1) * modelView;
- vec4 pos = vec4(normal, 0, 0) + p;
+ vec4 p = vec4(a_position, 1.0) * modelView;
+ vec4 pos = vec4(normal, 0.0, 0.0) + p;
vec4 projectedPivot = p * projection;
gl_Position = applyPivotTransform(pos * projection, pivotTransform, 0.0);
gl_Position.z = projectedPivot.y / projectedPivot.w * 0.5 + 0.5;
- v_colorTexCoords = a_colorTexCoords;
+ v_texCoords = a_texCoords;
+ v_maskColor = a_colorAndAnimate.rgb;
}
diff --git a/drape_frontend/shaders/user_mark_billboard.vsh.glsl b/drape_frontend/shaders/user_mark_billboard.vsh.glsl
index a555ae4515..88d3ae9827 100644
--- a/drape_frontend/shaders/user_mark_billboard.vsh.glsl
+++ b/drape_frontend/shaders/user_mark_billboard.vsh.glsl
@@ -1,19 +1,20 @@
attribute vec3 a_position;
attribute vec2 a_normal;
-attribute vec2 a_colorTexCoords;
-attribute float a_animate;
+attribute vec4 a_texCoords;
+attribute vec4 a_colorAndAnimate;
uniform mat4 modelView;
uniform mat4 projection;
uniform mat4 pivotTransform;
uniform float u_interpolationT;
-varying vec2 v_colorTexCoords;
+varying vec4 v_texCoords;
+varying vec3 v_maskColor;
void main()
{
vec2 normal = a_normal;
- if (a_animate > 0.0)
+ if (a_colorAndAnimate.w > 0.0)
normal = u_interpolationT * normal;
vec4 pivot = vec4(a_position.xyz, 1.0) * modelView;
@@ -21,5 +22,6 @@ void main()
vec4 projectedPivot = pivot * projection;
gl_Position = applyBillboardPivotTransform(projectedPivot, pivotTransform, 0.0, offset.xy);
gl_Position.z = projectedPivot.y / projectedPivot.w * 0.5 + 0.5;
- v_colorTexCoords = a_colorTexCoords;
+ v_texCoords = a_texCoords;
+ v_maskColor = a_colorAndAnimate.rgb;
}
diff --git a/drape_frontend/user_mark_shapes.cpp b/drape_frontend/user_mark_shapes.cpp
index 2531ac6279..5e96e88745 100644
--- a/drape_frontend/user_mark_shapes.cpp
+++ b/drape_frontend/user_mark_shapes.cpp
@@ -34,11 +34,9 @@ int const kLineSimplifyLevelEnd = 15;
namespace
{
-
template <typename TCreateVector>
-void AlignFormingNormals(TCreateVector const & fn, dp::Anchor anchor,
- dp::Anchor first, dp::Anchor second,
- glsl::vec2 & firstNormal, glsl::vec2 & secondNormal)
+void AlignFormingNormals(TCreateVector const & fn, dp::Anchor anchor, dp::Anchor first,
+ dp::Anchor second, glsl::vec2 & firstNormal, glsl::vec2 & secondNormal)
{
firstNormal = fn();
secondNormal = -firstNormal;
@@ -54,26 +52,27 @@ void AlignFormingNormals(TCreateVector const & fn, dp::Anchor anchor,
}
}
-void AlignHorizontal(float halfWidth, dp::Anchor anchor,
- glsl::vec2 & left, glsl::vec2 & right)
+void AlignHorizontal(float halfWidth, dp::Anchor anchor, glsl::vec2 & left, glsl::vec2 & right)
{
- AlignFormingNormals([&halfWidth]{ return glsl::vec2(-halfWidth, 0.0f); }, anchor, dp::Left, dp::Right, left, right);
+ AlignFormingNormals([&halfWidth] { return glsl::vec2(-halfWidth, 0.0f); }, anchor, dp::Left,
+ dp::Right, left, right);
}
-void AlignVertical(float halfHeight, dp::Anchor anchor,
- glsl::vec2 & up, glsl::vec2 & down)
+void AlignVertical(float halfHeight, dp::Anchor anchor, glsl::vec2 & up, glsl::vec2 & down)
{
- AlignFormingNormals([&halfHeight]{ return glsl::vec2(0.0f, -halfHeight); }, anchor, dp::Top, dp::Bottom, up, down);
+ AlignFormingNormals([&halfHeight] { return glsl::vec2(0.0f, -halfHeight); }, anchor, dp::Top,
+ dp::Bottom, up, down);
}
-struct UserPointVertex : gpu::BaseVertex
+struct UserPointVertex : public gpu::BaseVertex
{
+ using TTexCoord = glsl::vec4;
+ using TColorAndAnimate = glsl::vec4;
+
UserPointVertex() = default;
- UserPointVertex(TPosition const & pos, TNormal const & normal, TTexCoord const & texCoord, bool isAnim)
- : m_position(pos)
- , m_normal(normal)
- , m_texCoord(texCoord)
- , m_isAnim(isAnim ? 1.0f : -1.0f)
+ UserPointVertex(TPosition const & pos, TNormal const & normal, TTexCoord const & texCoord,
+ TColorAndAnimate const & colorAndAnimate)
+ : m_position(pos), m_normal(normal), m_texCoord(texCoord), m_colorAndAnimate(colorAndAnimate)
{}
static dp::BindingInfo GetBinding()
@@ -82,8 +81,8 @@ struct UserPointVertex : gpu::BaseVertex
uint8_t offset = 0;
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_colorTexCoords", info, offset);
- offset += dp::FillDecl<bool, UserPointVertex>(3, "a_animate", info, offset);
+ offset += dp::FillDecl<TTexCoord, UserPointVertex>(2, "a_texCoords", info, offset);
+ offset += dp::FillDecl<TColorAndAnimate, UserPointVertex>(3, "a_colorAndAnimate", info, offset);
return info;
}
@@ -91,22 +90,213 @@ struct UserPointVertex : gpu::BaseVertex
TPosition m_position;
TNormal m_normal;
TTexCoord m_texCoord;
- float m_isAnim;
+ TColorAndAnimate m_colorAndAnimate;
};
-} // namespace
+std::string GetSymbolNameForZoomLevel(UserMarkRenderParams const & renderInfo,
+ TileKey const & tileKey)
+{
+ if (!renderInfo.m_symbolNames)
+ return {};
+
+ for (auto itName = renderInfo.m_symbolNames->rbegin(); itName != renderInfo.m_symbolNames->rend();
+ ++itName)
+ {
+ if (itName->first <= tileKey.m_zoomLevel)
+ return itName->second;
+ }
+ return {};
+}
+
+void GenerateColoredSymbolShapes(UserMarkRenderParams const & renderInfo, TileKey const & tileKey,
+ m2::PointD const & tileCenter, ref_ptr<dp::TextureManager> textures,
+ m2::PointF & symbolSize, dp::Batcher & batcher)
+{
+ for (auto itSym = renderInfo.m_coloredSymbols->rbegin();
+ itSym != renderInfo.m_coloredSymbols->rend(); ++itSym)
+ {
+ if (itSym->first <= tileKey.m_zoomLevel)
+ {
+ ColoredSymbolViewParams params = itSym->second;
+ if (params.m_shape == ColoredSymbolViewParams::Shape::Circle)
+ symbolSize = m2::PointF(params.m_radiusInPixels * 2.0f, params.m_radiusInPixels * 2.0f);
+ else
+ symbolSize = params.m_sizeInPixels;
+
+ params.m_featureID = renderInfo.m_featureId;
+ params.m_tileCenter = tileCenter;
+ params.m_depth = renderInfo.m_depth;
+ params.m_depthLayer = renderInfo.m_depthLayer;
+ params.m_minVisibleScale = renderInfo.m_minZoom;
+ params.m_specialDisplacement = SpecialDisplacement::UserMark;
+ params.m_specialPriority = renderInfo.m_priority;
+ if (renderInfo.m_symbolSizes != nullptr)
+ {
+ ColoredSymbolShape(renderInfo.m_pivot, params, tileKey,
+ kStartUserMarkOverlayIndex + renderInfo.m_index,
+ *renderInfo.m_symbolSizes.get())
+ .Draw(&batcher, textures);
+ }
+ else
+ {
+ ColoredSymbolShape(renderInfo.m_pivot, params, tileKey,
+ kStartUserMarkOverlayIndex + renderInfo.m_index)
+ .Draw(&batcher, textures);
+ }
+ break;
+ }
+ }
+}
+
+void GeneratePoiSymbolShape(UserMarkRenderParams const & renderInfo, TileKey const & tileKey,
+ m2::PointD const & tileCenter, std::string const & symbolName,
+ ref_ptr<dp::TextureManager> textures, m2::PointF & symbolOffset,
+ dp::Batcher & batcher)
+{
+ PoiSymbolViewParams params(renderInfo.m_featureId);
+ params.m_tileCenter = tileCenter;
+ params.m_depth = renderInfo.m_depth;
+ params.m_depthLayer = renderInfo.m_depthLayer;
+ params.m_minVisibleScale = renderInfo.m_minZoom;
+ params.m_specialDisplacement = SpecialDisplacement::UserMark;
+ params.m_specialPriority = renderInfo.m_priority;
+ params.m_symbolName = symbolName;
+ params.m_anchor = renderInfo.m_anchor;
+ params.m_startOverlayRank =
+ renderInfo.m_coloredSymbols != nullptr ? dp::OverlayRank1 : dp::OverlayRank0;
+ if (renderInfo.m_symbolOffsets != nullptr)
+ {
+ ASSERT_GREATER(tileKey.m_zoomLevel, 0, ());
+ ASSERT_LESS_OR_EQUAL(tileKey.m_zoomLevel, scales::UPPER_STYLE_SCALE, ());
+ size_t offsetIndex = 0;
+ if (tileKey.m_zoomLevel > 0)
+ offsetIndex = static_cast<size_t>(min(tileKey.m_zoomLevel - 1, scales::UPPER_STYLE_SCALE));
+ symbolOffset = renderInfo.m_symbolOffsets->at(offsetIndex);
+ params.m_offset = symbolOffset;
+ }
+ PoiSymbolShape(renderInfo.m_pivot, params, tileKey,
+ kStartUserMarkOverlayIndex + renderInfo.m_index)
+ .Draw(&batcher, textures);
+}
+
+void GenerateTextShapes(UserMarkRenderParams const & renderInfo, TileKey const & tileKey,
+ m2::PointD const & tileCenter, m2::PointF const & symbolSize,
+ m2::PointF const & symbolOffset, ref_ptr<dp::TextureManager> textures,
+ dp::Batcher & batcher)
+{
+ if (renderInfo.m_minTitleZoom > tileKey.m_zoomLevel)
+ return;
+
+ auto const vs = static_cast<float>(df::VisualParams::Instance().GetVisualScale());
+
+ for (auto const & titleDecl : *renderInfo.m_titleDecl)
+ {
+ if (titleDecl.m_primaryText.empty())
+ continue;
+
+ TextViewParams params;
+ params.m_featureID = renderInfo.m_featureId;
+ params.m_tileCenter = tileCenter;
+ params.m_titleDecl = titleDecl;
+
+ // Here we use visual scale to adapt texts sizes and offsets
+ // to different screen resolutions and DPI.
+ params.m_titleDecl.m_primaryTextFont.m_size *= vs;
+ params.m_titleDecl.m_secondaryTextFont.m_size *= vs;
+ params.m_titleDecl.m_primaryOffset *= vs;
+ params.m_titleDecl.m_secondaryOffset *= vs;
+ bool const isSdf = df::VisualParams::Instance().IsSdfPrefered();
+ params.m_titleDecl.m_primaryTextFont.m_isSdf =
+ params.m_titleDecl.m_primaryTextFont.m_outlineColor != dp::Color::Transparent() ? true : isSdf;
+ params.m_titleDecl.m_secondaryTextFont.m_isSdf =
+ params.m_titleDecl.m_secondaryTextFont.m_outlineColor != dp::Color::Transparent() ? true : isSdf;
+
+ params.m_depth = renderInfo.m_depth;
+ params.m_depthLayer = renderInfo.m_depthLayer;
+ params.m_minVisibleScale = renderInfo.m_minZoom;
+
+ uint32_t const overlayIndex = kStartUserMarkOverlayIndex + renderInfo.m_index;
+ if (renderInfo.m_hasTitlePriority)
+ {
+ params.m_specialDisplacement = SpecialDisplacement::UserMark;
+ params.m_specialPriority = renderInfo.m_priority;
+ params.m_startOverlayRank = dp::OverlayRank0;
+ if (renderInfo.m_hasSymbolPriority)
+ {
+ if (renderInfo.m_symbolNames != nullptr)
+ params.m_startOverlayRank++;
+ if (renderInfo.m_coloredSymbols != nullptr)
+ params.m_startOverlayRank++;
+ ASSERT_LESS(params.m_startOverlayRank, dp::OverlayRanksCount, ());
+ }
+ }
+
+ if (renderInfo.m_symbolSizes != nullptr)
+ {
+ TextShape(renderInfo.m_pivot, params, tileKey, *renderInfo.m_symbolSizes,
+ m2::PointF(0.0f, 0.0f) /* symbolOffset */, renderInfo.m_anchor, overlayIndex)
+ .Draw(&batcher, textures);
+ }
+ else
+ {
+ TextShape(renderInfo.m_pivot, params, tileKey, symbolSize, symbolOffset, renderInfo.m_anchor,
+ overlayIndex)
+ .Draw(&batcher, textures);
+ }
+ }
+}
+
+m2::SharedSpline SimplifySpline(UserLineRenderParams const & renderInfo, double sqrScale)
+{
+ auto const vs = static_cast<float>(df::VisualParams::Instance().GetVisualScale());
+ m2::SharedSpline spline;
+ spline.Reset(new m2::Spline(renderInfo.m_spline->GetSize()));
+
+ static double const kMinSegmentLength = std::pow(4.0 * vs, 2);
+ m2::PointD lastAddedPoint;
+ for (auto const & point : renderInfo.m_spline->GetPath())
+ {
+ if (spline->GetSize() > 1 && point.SquareLength(lastAddedPoint) * sqrScale < kMinSegmentLength)
+ {
+ spline->ReplacePoint(point);
+ }
+ else
+ {
+ spline->AddPoint(point);
+ lastAddedPoint = point;
+ }
+ }
+ return spline;
+}
+
+std::string GetBackgroundForSymbol(std::string const & symbolName,
+ ref_ptr<dp::TextureManager> textures)
+{
+ static std::string const kDelimiter = "-";
+ static std::string const kBackgroundName = "bg";
+ auto const tokens = strings::Tokenize(symbolName, kDelimiter.c_str());
+ if (tokens.size() < 2 || tokens.size() > 3)
+ return {};
+ std::string backgroundSymbol;
+ if (tokens.size() == 2)
+ backgroundSymbol = tokens[0] + kDelimiter + kBackgroundName;
+ else
+ backgroundSymbol = tokens[0] + kDelimiter + kBackgroundName + kDelimiter + tokens[2];
+ return textures->HasSymbolRegion(backgroundSymbol) ? backgroundSymbol : "";
+}
+} // namespace
void CacheUserMarks(TileKey const & tileKey, ref_ptr<dp::TextureManager> textures,
MarkIDCollection const & marksId, UserMarksRenderCollection & renderParams,
dp::Batcher & batcher)
{
- float const vs = static_cast<float>(df::VisualParams::Instance().GetVisualScale());
using UPV = UserPointVertex;
size_t const vertexCount = marksId.size() * dp::Batcher::VertexPerQuad;
buffer_vector<UPV, 128> buffer;
bool isAnimated = false;
dp::TextureManager::SymbolRegion region;
+ dp::TextureManager::SymbolRegion backgroundRegion;
RenderState::DepthLayer depthLayer = RenderState::UserMarkLayer;
for (auto const id : marksId)
{
@@ -114,7 +304,7 @@ void CacheUserMarks(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture
if (it == renderParams.end())
continue;
- UserMarkRenderParams & renderInfo = *it->second.get();
+ UserMarkRenderParams & renderInfo = *it->second;
if (!renderInfo.m_isVisible)
continue;
@@ -123,78 +313,21 @@ void CacheUserMarks(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture
m2::PointF symbolSize(0.0f, 0.0f);
m2::PointF symbolOffset(0.0f, 0.0f);
- std::string symbolName;
- if (renderInfo.m_symbolNames != nullptr)
- {
- for (auto itName = renderInfo.m_symbolNames->rbegin(); itName != renderInfo.m_symbolNames->rend(); ++itName)
- {
- if (itName->first <= tileKey.m_zoomLevel)
- {
- symbolName = itName->second;
- break;
- }
- }
- }
+ auto const symbolName = GetSymbolNameForZoomLevel(renderInfo, tileKey);
+
+ dp::Color color = dp::Color::White();
+ if (!renderInfo.m_color.empty())
+ color = df::GetColorConstant(renderInfo.m_color);
if (renderInfo.m_hasSymbolPriority)
{
if (renderInfo.m_coloredSymbols != nullptr)
- {
- for (auto itSym = renderInfo.m_coloredSymbols->rbegin(); itSym != renderInfo.m_coloredSymbols->rend(); ++itSym)
- {
- if (itSym->first <= tileKey.m_zoomLevel)
- {
- ColoredSymbolViewParams params = itSym->second;
- if (params.m_shape == ColoredSymbolViewParams::Shape::Circle)
- symbolSize = m2::PointF(params.m_radiusInPixels * 2.0f, params.m_radiusInPixels * 2.0f);
- else
- symbolSize = params.m_sizeInPixels;
-
- params.m_featureID = renderInfo.m_featureId;
- params.m_tileCenter = tileCenter;
- params.m_depth = renderInfo.m_depth;
- params.m_depthLayer = renderInfo.m_depthLayer;
- params.m_minVisibleScale = renderInfo.m_minZoom;
- params.m_specialDisplacement = SpecialDisplacement::UserMark;
- params.m_specialPriority = renderInfo.m_priority;
- if (renderInfo.m_symbolSizes != nullptr)
- {
- ColoredSymbolShape(renderInfo.m_pivot, params, tileKey, kStartUserMarkOverlayIndex + renderInfo.m_index,
- *renderInfo.m_symbolSizes.get()).Draw(&batcher, textures);
- }
- else
- {
- ColoredSymbolShape(renderInfo.m_pivot, params, tileKey,
- kStartUserMarkOverlayIndex + renderInfo.m_index).Draw(&batcher, textures);
- }
- break;
- }
- }
- }
+ GenerateColoredSymbolShapes(renderInfo, tileKey, tileCenter, textures, symbolSize, batcher);
+
if (renderInfo.m_symbolNames != nullptr)
{
- PoiSymbolViewParams params(renderInfo.m_featureId);
- params.m_tileCenter = tileCenter;
- params.m_depth = renderInfo.m_depth;
- params.m_depthLayer = renderInfo.m_depthLayer;
- params.m_minVisibleScale = renderInfo.m_minZoom;
- params.m_specialDisplacement = SpecialDisplacement::UserMark;
- params.m_specialPriority = renderInfo.m_priority;
- params.m_symbolName = symbolName;
- params.m_anchor = renderInfo.m_anchor;
- params.m_startOverlayRank = renderInfo.m_coloredSymbols != nullptr ? dp::OverlayRank1 : dp::OverlayRank0;
- if (renderInfo.m_symbolOffsets != nullptr)
- {
- ASSERT_GREATER(tileKey.m_zoomLevel, 0, ());
- ASSERT_LESS_OR_EQUAL(tileKey.m_zoomLevel, scales::UPPER_STYLE_SCALE, ());
- size_t offsetIndex = 0;
- if (tileKey.m_zoomLevel > 0)
- offsetIndex = static_cast<size_t>(min(tileKey.m_zoomLevel - 1, scales::UPPER_STYLE_SCALE));
- symbolOffset = renderInfo.m_symbolOffsets->at(offsetIndex);
- params.m_offset = symbolOffset;
- }
- PoiSymbolShape(renderInfo.m_pivot, params, tileKey,
- kStartUserMarkOverlayIndex + renderInfo.m_index).Draw(&batcher, textures);
+ GeneratePoiSymbolShape(renderInfo, tileKey, tileCenter, symbolName, textures, symbolOffset,
+ batcher);
}
}
else if (renderInfo.m_symbolNames != nullptr)
@@ -202,7 +335,12 @@ void CacheUserMarks(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture
buffer.reserve(vertexCount);
textures->GetSymbolRegion(symbolName, region);
+ auto const backgroundSymbol = GetBackgroundForSymbol(symbolName, textures);
+ if (!backgroundSymbol.empty())
+ textures->GetSymbolRegion(backgroundSymbol, backgroundRegion);
+
m2::RectF const & texRect = region.GetTexRect();
+ m2::RectF const & bgTexRect = backgroundRegion.GetTexRect();
m2::PointF const pxSize = region.GetPixelSize();
dp::Anchor const anchor = renderInfo.m_anchor;
m2::PointD const pt = MapShape::ConvertToLocal(renderInfo.m_pivot, tileCenter,
@@ -217,11 +355,23 @@ void CacheUserMarks(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture
m2::PointD const pixelOffset = renderInfo.m_pixelOffset;
glsl::vec2 const offset(pixelOffset.x, pixelOffset.y);
-
- buffer.emplace_back(pos, left + down + offset, glsl::ToVec2(texRect.LeftTop()), runAnim);
- buffer.emplace_back(pos, left + up + offset, glsl::ToVec2(texRect.LeftBottom()), runAnim);
- buffer.emplace_back(pos, right + down + offset, glsl::ToVec2(texRect.RightTop()), runAnim);
- buffer.emplace_back(pos, right + up + offset, glsl::ToVec2(texRect.RightBottom()), runAnim);
+ up += offset;
+ down += offset;
+
+ glsl::vec4 colorAndAnimate(color.GetRedF(), color.GetGreenF(), color.GetBlueF(),
+ runAnim ? 1.0f : -1.0f);
+ buffer.emplace_back(pos, left + down,
+ glsl::ToVec4(texRect.LeftTop(), bgTexRect.LeftTop()),
+ colorAndAnimate);
+ buffer.emplace_back(pos, left + up,
+ glsl::ToVec4(texRect.LeftBottom(), bgTexRect.LeftBottom()),
+ colorAndAnimate);
+ buffer.emplace_back(pos, right + down,
+ glsl::ToVec4(texRect.RightTop(), bgTexRect.RightTop()),
+ colorAndAnimate);
+ buffer.emplace_back(pos, right + up,
+ glsl::ToVec4(texRect.RightBottom(), bgTexRect.RightBottom()),
+ colorAndAnimate);
}
if (!symbolName.empty())
@@ -231,62 +381,10 @@ void CacheUserMarks(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture
symbolSize.y = std::max(region.GetPixelSize().y, symbolSize.y);
}
- if (renderInfo.m_titleDecl != nullptr && renderInfo.m_minTitleZoom <= tileKey.m_zoomLevel)
+ if (renderInfo.m_titleDecl != nullptr)
{
- for (auto const & titleDecl : *renderInfo.m_titleDecl)
- {
- if (titleDecl.m_primaryText.empty())
- continue;
-
- TextViewParams params;
- params.m_featureID = renderInfo.m_featureId;
- params.m_tileCenter = tileCenter;
- params.m_titleDecl = titleDecl;
-
- // Here we use visual scale to adapt texts sizes and offsets
- // to different screen resolutions and DPI.
- params.m_titleDecl.m_primaryTextFont.m_size *= vs;
- params.m_titleDecl.m_secondaryTextFont.m_size *= vs;
- params.m_titleDecl.m_primaryOffset *= vs;
- params.m_titleDecl.m_secondaryOffset *= vs;
- bool const isSdf = df::VisualParams::Instance().IsSdfPrefered();
- params.m_titleDecl.m_primaryTextFont.m_isSdf =
- params.m_titleDecl.m_primaryTextFont.m_outlineColor != dp::Color::Transparent() ? true : isSdf;
- params.m_titleDecl.m_secondaryTextFont.m_isSdf =
- params.m_titleDecl.m_secondaryTextFont.m_outlineColor != dp::Color::Transparent() ? true : isSdf;
-
- params.m_depth = renderInfo.m_depth;
- params.m_depthLayer = renderInfo.m_depthLayer;
- params.m_minVisibleScale = renderInfo.m_minZoom;
-
- uint32_t const overlayIndex = kStartUserMarkOverlayIndex + renderInfo.m_index;
- if (renderInfo.m_hasTitlePriority)
- {
- params.m_specialDisplacement = SpecialDisplacement::UserMark;
- params.m_specialPriority = renderInfo.m_priority;
- params.m_startOverlayRank = dp::OverlayRank0;
- if (renderInfo.m_hasSymbolPriority)
- {
- if (renderInfo.m_symbolNames != nullptr)
- params.m_startOverlayRank++;
- if (renderInfo.m_coloredSymbols != nullptr)
- params.m_startOverlayRank++;
- ASSERT_LESS(params.m_startOverlayRank, dp::OverlayRanksCount, ());
- }
- }
-
- if (renderInfo.m_symbolSizes != nullptr)
- {
- TextShape(renderInfo.m_pivot, params, tileKey, *renderInfo.m_symbolSizes.get(),
- m2::PointF(0.0f, 0.0f) /* symbolOffset */, renderInfo.m_anchor,
- overlayIndex).Draw(&batcher, textures);
- }
- else
- {
- TextShape(renderInfo.m_pivot, params, tileKey,
- symbolSize, symbolOffset, renderInfo.m_anchor, overlayIndex).Draw(&batcher, textures);
- }
- }
+ GenerateTextShapes(renderInfo, tileKey, tileCenter, symbolSize, symbolOffset, textures,
+ batcher);
}
renderInfo.m_justCreated = false;
@@ -342,7 +440,7 @@ void CacheUserLines(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture
LineIDCollection const & linesId, UserLinesRenderCollection & renderParams,
dp::Batcher & batcher)
{
- float const vs = static_cast<float>(df::VisualParams::Instance().GetVisualScale());
+ auto const vs = static_cast<float>(df::VisualParams::Instance().GetVisualScale());
bool const simplify = tileKey.m_zoomLevel <= kLineSimplifyLevelEnd;
double sqrScale = 1.0;
@@ -358,7 +456,7 @@ void CacheUserLines(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture
if (it == renderParams.end())
continue;
- UserLineRenderParams const & renderInfo = *it->second.get();
+ UserLineRenderParams const & renderInfo = *it->second;
m2::RectD const tileRect = tileKey.GetGlobalRect();
@@ -379,24 +477,7 @@ void CacheUserLines(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture
m2::SharedSpline spline = renderInfo.m_spline;
if (simplify)
- {
- spline.Reset(new m2::Spline(renderInfo.m_spline->GetSize()));
-
- static double const kMinSegmentLength = std::pow(4.0 * vs, 2);
- m2::PointD lastAddedPoint;
- for (auto const & point : renderInfo.m_spline->GetPath())
- {
- if (spline->GetSize() > 1 && point.SquareLength(lastAddedPoint) * sqrScale < kMinSegmentLength)
- {
- spline->ReplacePoint(point);
- }
- else
- {
- spline->AddPoint(point);
- lastAddedPoint = point;
- }
- }
- }
+ spline = SimplifySpline(renderInfo, sqrScale);
auto const clippedSplines = m2::ClipSplineByRect(tileRect, spline);
for (auto const & clippedSpline : clippedSplines)
@@ -411,7 +492,8 @@ void CacheUserLines(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture
params.m_color = layer.m_color;
params.m_depth = layer.m_depth;
params.m_depthLayer = renderInfo.m_depthLayer;
- params.m_width = layer.m_width * vs * kLineWidthZoomFactor[tileKey.m_zoomLevel];
+ params.m_width = static_cast<float>(layer.m_width * vs *
+ kLineWidthZoomFactor[tileKey.m_zoomLevel]);
params.m_minVisibleScale = 1;
params.m_rank = 0;
diff --git a/drape_frontend/user_mark_shapes.hpp b/drape_frontend/user_mark_shapes.hpp
index 3b5bb76529..41e66c85c8 100644
--- a/drape_frontend/user_mark_shapes.hpp
+++ b/drape_frontend/user_mark_shapes.hpp
@@ -25,6 +25,7 @@ struct UserMarkRenderParams
drape_ptr<UserPointMark::TitlesInfo> m_titleDecl;
drape_ptr<UserPointMark::SymbolSizes> m_symbolSizes;
drape_ptr<UserPointMark::SymbolOffsets> m_symbolOffsets;
+ df::ColorConstant m_color;
bool m_hasSymbolPriority = false;
bool m_hasTitlePriority = false;
uint16_t m_priority = 0;
diff --git a/drape_frontend/user_marks_provider.hpp b/drape_frontend/user_marks_provider.hpp
index da8b97502e..dd0e0c85ca 100644
--- a/drape_frontend/user_marks_provider.hpp
+++ b/drape_frontend/user_marks_provider.hpp
@@ -1,5 +1,6 @@
#pragma once
+#include "drape_frontend/color_constants.hpp"
#include "drape_frontend/render_state.hpp"
#include "drape_frontend/shape_view_params.hpp"
#include "drape_frontend/user_marks_global.hpp"
@@ -41,8 +42,8 @@ public:
using SymbolSizes = std::vector<m2::PointF>;
using SymbolOffsets = std::vector<m2::PointF>;
- UserPointMark(df::MarkID id);
- virtual ~UserPointMark() {}
+ explicit UserPointMark(df::MarkID id);
+ virtual ~UserPointMark() = default;
virtual bool IsDirty() const = 0;
virtual void ResetChanges() const = 0;
@@ -69,6 +70,7 @@ public:
virtual int GetMinTitleZoom() const = 0;
virtual FeatureID GetFeatureID() const = 0;
virtual bool HasCreationAnimation() const = 0;
+ virtual df::ColorConstant GetColor() const = 0;
private:
MarkID m_id;
@@ -77,8 +79,8 @@ private:
class UserLineMark
{
public:
- UserLineMark(df::LineID id);
- virtual ~UserLineMark() {}
+ explicit UserLineMark(df::LineID id);
+ virtual ~UserLineMark() = default;
virtual bool IsDirty() const = 0;
virtual void ResetChanges() const = 0;
@@ -100,7 +102,7 @@ private:
class UserMarksProvider
{
public:
- virtual ~UserMarksProvider() {}
+ virtual ~UserMarksProvider() = default;
virtual GroupIDSet const & GetDirtyGroupIds() const = 0;
virtual GroupIDSet const & GetRemovedGroupIds() const = 0;
virtual GroupIDSet GetAllGroupIds() const = 0;
@@ -117,5 +119,4 @@ public:
/// Never store UserLineMark reference.
virtual UserLineMark const * GetUserLineMark(LineID lineId) const = 0;
};
-
-} // namespace df
+} // namespace df
diff --git a/map/bookmark.cpp b/map/bookmark.cpp
index 279570f562..116db07216 100644
--- a/map/bookmark.cpp
+++ b/map/bookmark.cpp
@@ -59,10 +59,37 @@ drape_ptr<df::UserPointMark::SymbolNameZoomInfo> Bookmark::GetSymbolNames() cons
{
auto const name = GetType();
auto symbol = make_unique_dp<SymbolNameZoomInfo>();
- symbol->insert(std::make_pair(1 /* zoomLevel */, name));
+ symbol->insert(std::make_pair(1 /* zoomLevel */, "bookmark-default-xs"));
+ symbol->insert(std::make_pair(8 /* zoomLevel */, "bookmark-default-s"));
+ symbol->insert(std::make_pair(11 /* zoomLevel */, "bookmark-default-m"));
+ symbol->insert(std::make_pair(15 /* zoomLevel */, "bookmark-default-l"));
return symbol;
}
+df::ColorConstant Bookmark::GetColor() const
+{
+ //TODO(@darina): Use new colors instead of GetType().
+ auto const type = GetType();
+ if (type == "placemark-red")
+ return "BookmarkRed";
+ if (type == "placemark-blue")
+ return "BookmarkBlue";
+ if (type == "placemark-purple")
+ return "BookmarkPurple";
+ if (type == "placemark-yellow")
+ return "BookmarkYellow";
+ if (type == "placemark-pink")
+ return "BookmarkPink";
+ if (type == "placemark-brown")
+ return "BookmarkBrown";
+ if (type == "placemark-green")
+ return "BookmarkGreen";
+ if (type == "placemark-orange")
+ return "BookmarkOrange";
+
+ return "BookmarkRed";
+}
+
bool Bookmark::HasCreationAnimation() const
{
return true;
diff --git a/map/bookmark.hpp b/map/bookmark.hpp
index 91a890263b..8076f7c087 100644
--- a/map/bookmark.hpp
+++ b/map/bookmark.hpp
@@ -83,6 +83,7 @@ public:
dp::Anchor GetAnchor() const override;
drape_ptr<SymbolNameZoomInfo> GetSymbolNames() const override;
+ df::ColorConstant GetColor() const override;
bool HasCreationAnimation() const override;
std::string const & GetName() const;
diff --git a/map/user_mark.hpp b/map/user_mark.hpp
index b072a766b3..03ae257e31 100644
--- a/map/user_mark.hpp
+++ b/map/user_mark.hpp
@@ -70,6 +70,7 @@ public:
int GetMinTitleZoom() const override { return GetMinZoom(); }
FeatureID GetFeatureID() const override { return FeatureID(); }
bool HasCreationAnimation() const override { return false; }
+ df::ColorConstant GetColor() const override { return {}; }
ms::LatLon GetLatLon() const;
diff --git a/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj b/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj
index cce0ff8bfd..2c0a86832f 100644
--- a/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj
+++ b/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj
@@ -239,6 +239,9 @@
452C9ED31CEDCF3200A55E57 /* sequence_animation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = sequence_animation.hpp; sourceTree = "<group>"; };
452FE5C11EB2004F00EE470C /* screen_quad_renderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = screen_quad_renderer.cpp; sourceTree = "<group>"; };
452FE5C21EB2004F00EE470C /* screen_quad_renderer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = screen_quad_renderer.hpp; sourceTree = "<group>"; };
+ 453C5E882065599C00C78952 /* route_marker.vsh.glsl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = route_marker.vsh.glsl; path = shaders/route_marker.vsh.glsl; sourceTree = "<group>"; };
+ 453C5E892065599D00C78952 /* user_mark.fsh.glsl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = user_mark.fsh.glsl; path = shaders/user_mark.fsh.glsl; sourceTree = "<group>"; };
+ 453C5E8A2065599D00C78952 /* route_marker.fsh.glsl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = route_marker.fsh.glsl; path = shaders/route_marker.fsh.glsl; sourceTree = "<group>"; };
453EEA6B1E3A28F400505E09 /* colored_symbol_shape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = colored_symbol_shape.cpp; sourceTree = "<group>"; };
453EEA6C1E3A28F400505E09 /* colored_symbol_shape.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = colored_symbol_shape.hpp; sourceTree = "<group>"; };
453FEDAA1F34C257005C1BB4 /* render_state.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = render_state.cpp; sourceTree = "<group>"; };
@@ -280,7 +283,6 @@
45BB02311EB8BE2B00FE5C0C /* dashed_line.vsh.glsl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = dashed_line.vsh.glsl; path = shaders/dashed_line.vsh.glsl; sourceTree = "<group>"; };
45BB02321EB8BE2B00FE5C0C /* debug_rect.fsh.glsl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = debug_rect.fsh.glsl; path = shaders/debug_rect.fsh.glsl; sourceTree = "<group>"; };
45BB02331EB8BE2B00FE5C0C /* debug_rect.vsh.glsl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = debug_rect.vsh.glsl; path = shaders/debug_rect.vsh.glsl; sourceTree = "<group>"; };
- 45BB02341EB8BE2B00FE5C0C /* discarded_texturing.fsh.glsl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = discarded_texturing.fsh.glsl; path = shaders/discarded_texturing.fsh.glsl; sourceTree = "<group>"; };
45BB02351EB8BE2B00FE5C0C /* hatching_area.fsh.glsl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = hatching_area.fsh.glsl; path = shaders/hatching_area.fsh.glsl; sourceTree = "<group>"; };
45BB02361EB8BE2B00FE5C0C /* hatching_area.vsh.glsl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = hatching_area.vsh.glsl; path = shaders/hatching_area.vsh.glsl; sourceTree = "<group>"; };
45BB02371EB8BE2B00FE5C0C /* line.fsh.glsl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = line.fsh.glsl; path = shaders/line.fsh.glsl; sourceTree = "<group>"; };
@@ -480,16 +482,6 @@
45BB02221EB8BE1400FE5C0C /* shaders */ = {
isa = PBXGroup;
children = (
- 455FFE391F3896F600F68481 /* route_arrow.fsh.glsl */,
- 455FFE3A1F3896F600F68481 /* smaa_blending_weight.fsh.glsl */,
- 455FFE3B1F3896F600F68481 /* smaa_blending_weight.vsh.glsl */,
- 455FFE3C1F3896F600F68481 /* smaa_edges.fsh.glsl */,
- 455FFE3D1F3896F600F68481 /* smaa_edges.vsh.glsl */,
- 455FFE3E1F3896F600F68481 /* smaa_final.fsh.glsl */,
- 455FFE3F1F3896F600F68481 /* smaa_final.vsh.glsl */,
- 451A2A7E1EE8463F003E05A4 /* circle_point.fsh.glsl */,
- 451A2A7F1EE8463F003E05A4 /* circle_point.vsh.glsl */,
- 4560692B1EB9F9D2009AB7B7 /* shaders_lib.glsl */,
45BB02231EB8BE2B00FE5C0C /* area.vsh.glsl */,
45BB02241EB8BE2B00FE5C0C /* area3d_outline.vsh.glsl */,
45BB02251EB8BE2B00FE5C0C /* area3d.vsh.glsl */,
@@ -498,6 +490,8 @@
45BB02281EB8BE2B00FE5C0C /* arrow3d_shadow.vsh.glsl */,
45BB02291EB8BE2B00FE5C0C /* arrow3d.fsh.glsl */,
45BB022A1EB8BE2B00FE5C0C /* arrow3d.vsh.glsl */,
+ 451A2A7E1EE8463F003E05A4 /* circle_point.fsh.glsl */,
+ 451A2A7F1EE8463F003E05A4 /* circle_point.vsh.glsl */,
45BB022B1EB8BE2B00FE5C0C /* circle.fsh.glsl */,
45BB022C1EB8BE2B00FE5C0C /* circle.vsh.glsl */,
45BB022D1EB8BE2B00FE5C0C /* colored_symbol_billboard.vsh.glsl */,
@@ -507,7 +501,6 @@
45BB02311EB8BE2B00FE5C0C /* dashed_line.vsh.glsl */,
45BB02321EB8BE2B00FE5C0C /* debug_rect.fsh.glsl */,
45BB02331EB8BE2B00FE5C0C /* debug_rect.vsh.glsl */,
- 45BB02341EB8BE2B00FE5C0C /* discarded_texturing.fsh.glsl */,
45BB02351EB8BE2B00FE5C0C /* hatching_area.fsh.glsl */,
45BB02361EB8BE2B00FE5C0C /* hatching_area.vsh.glsl */,
45BB02371EB8BE2B00FE5C0C /* line.fsh.glsl */,
@@ -518,13 +511,23 @@
45BB023C1EB8BE2B00FE5C0C /* my_position.vsh.glsl */,
45BB023D1EB8BE2B00FE5C0C /* path_symbol.vsh.glsl */,
45BB023E1EB8BE2B00FE5C0C /* position_accuracy3d.vsh.glsl */,
+ 455FFE391F3896F600F68481 /* route_arrow.fsh.glsl */,
45BB023F1EB8BE2B00FE5C0C /* route_arrow.vsh.glsl */,
45BB02401EB8BE2B00FE5C0C /* route_dash.fsh.glsl */,
+ 453C5E8A2065599D00C78952 /* route_marker.fsh.glsl */,
+ 453C5E882065599C00C78952 /* route_marker.vsh.glsl */,
45BB02411EB8BE2B00FE5C0C /* route.fsh.glsl */,
45BB02421EB8BE2B00FE5C0C /* route.vsh.glsl */,
45BB02431EB8BE2B00FE5C0C /* ruler.vsh.glsl */,
45BB02441EB8BE2B00FE5C0C /* screen_quad.vsh.glsl */,
45BB02451EB8BE2B00FE5C0C /* shader_index.txt */,
+ 4560692B1EB9F9D2009AB7B7 /* shaders_lib.glsl */,
+ 455FFE3A1F3896F600F68481 /* smaa_blending_weight.fsh.glsl */,
+ 455FFE3B1F3896F600F68481 /* smaa_blending_weight.vsh.glsl */,
+ 455FFE3C1F3896F600F68481 /* smaa_edges.fsh.glsl */,
+ 455FFE3D1F3896F600F68481 /* smaa_edges.vsh.glsl */,
+ 455FFE3E1F3896F600F68481 /* smaa_final.fsh.glsl */,
+ 455FFE3F1F3896F600F68481 /* smaa_final.vsh.glsl */,
45BB02461EB8BE2B00FE5C0C /* solid_color.fsh.glsl */,
45BB02471EB8BE2B00FE5C0C /* text_billboard.vsh.glsl */,
45BB02481EB8BE2B00FE5C0C /* text_fixed.fsh.glsl */,
@@ -543,6 +546,7 @@
45BB02571EB8BE2B00FE5C0C /* traffic.fsh.glsl */,
45BB02581EB8BE2B00FE5C0C /* traffic.vsh.glsl */,
45BB02591EB8BE2B00FE5C0C /* user_mark_billboard.vsh.glsl */,
+ 453C5E892065599D00C78952 /* user_mark.fsh.glsl */,
45BB025A1EB8BE2B00FE5C0C /* user_mark.vsh.glsl */,
);
name = shaders;