diff options
author | Ansis Brammanis <brammanis@gmail.com> | 2017-06-27 14:00:33 -0400 |
---|---|---|
committer | Ansis Brammanis <brammanis@gmail.com> | 2017-06-27 14:00:33 -0400 |
commit | 1d9d40b4992923ddd9d5258d300a1136d3dc2f1e (patch) | |
tree | 0e6715660e6fd469b4b8d8b78f429142a4272ce7 | |
parent | d2df457879cc6b39e244ba1858623becec8ddd7d (diff) | |
download | qtlocation-mapboxgl-1d9d40b4992923ddd9d5258d300a1136d3dc2f1e.tar.gz |
make line labels kindof work
-rw-r--r-- | src/mbgl/gl/context.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/layout/symbol_layout.cpp | 15 | ||||
-rw-r--r-- | src/mbgl/layout/symbol_layout.hpp | 4 | ||||
-rw-r--r-- | src/mbgl/layout/symbol_projection.cpp | 13 | ||||
-rw-r--r-- | src/mbgl/renderer/buckets/symbol_bucket.hpp | 2 |
5 files changed, 21 insertions, 14 deletions
diff --git a/src/mbgl/gl/context.hpp b/src/mbgl/gl/context.hpp index 9bde094281..43fe99dac5 100644 --- a/src/mbgl/gl/context.hpp +++ b/src/mbgl/gl/context.hpp @@ -74,6 +74,7 @@ public: template <class Vertex, class DrawMode> void updateVertexBuffer(VertexVector<Vertex, DrawMode>&& v, VertexBuffer<Vertex, DrawMode>& buffer) { + assert(v.vertexSize() == buffer.vertexCount); updateVertexBuffer(v.data(), v.byteSize(), buffer.buffer); } diff --git a/src/mbgl/layout/symbol_layout.cpp b/src/mbgl/layout/symbol_layout.cpp index 6b79ec513a..51a030de57 100644 --- a/src/mbgl/layout/symbol_layout.cpp +++ b/src/mbgl/layout/symbol_layout.cpp @@ -501,12 +501,13 @@ std::unique_ptr<SymbolBucket> SymbolLayout::place(CollisionTile& collisionTile) collisionTile.insertFeature(symbolInstance.textCollisionFeature, glyphScale, layout.get<TextIgnorePlacement>()); if (glyphScale < collisionTile.maxScale) { const Range<float> sizeData = bucket->textSizeBinder->getVertexSizeData(feature); + PlacedSymbol placedSymbol(symbolInstance.anchor.point, symbolInstance.anchor.segment, sizeData.min, sizeData.max, + 0, 0, placementZoom, false, symbolInstance.line); for (const auto& symbol : symbolInstance.glyphQuads) { addSymbol( bucket->text, sizeData, symbol, placementZoom, - keepUpright, textPlacement, collisionTile.config.angle, symbolInstance.writingModes, symbolInstance.anchor); + keepUpright, textPlacement, collisionTile.config.angle, symbolInstance.writingModes, symbolInstance.anchor, placedSymbol); } - PlacedSymbol placedSymbol(symbolInstance.anchor.point, symbolInstance.index, sizeData.min, sizeData.max, 0, 0, placementZoom, false, symbolInstance.line); bucket->text.placedSymbols.emplace_back(std::move(placedSymbol)); } } @@ -516,10 +517,11 @@ std::unique_ptr<SymbolBucket> SymbolLayout::place(CollisionTile& collisionTile) collisionTile.insertFeature(symbolInstance.iconCollisionFeature, iconScale, layout.get<IconIgnorePlacement>()); if (iconScale < collisionTile.maxScale && symbolInstance.iconQuad) { const Range<float> sizeData = bucket->iconSizeBinder->getVertexSizeData(feature); + PlacedSymbol placedSymbol(symbolInstance.anchor.point, symbolInstance.anchor.segment, sizeData.min, sizeData.max, + 0, 0, placementZoom, false, symbolInstance.line); addSymbol( bucket->icon, sizeData, *symbolInstance.iconQuad, placementZoom, - keepUpright, iconPlacement, collisionTile.config.angle, symbolInstance.writingModes, symbolInstance.anchor); - PlacedSymbol placedSymbol(symbolInstance.anchor.point, symbolInstance.index, sizeData.min, sizeData.max, 0, 0, placementZoom, false, symbolInstance.line); + keepUpright, iconPlacement, collisionTile.config.angle, symbolInstance.writingModes, symbolInstance.anchor, placedSymbol); bucket->icon.placedSymbols.emplace_back(std::move(placedSymbol)); } } @@ -546,7 +548,8 @@ void SymbolLayout::addSymbol(Buffer& buffer, const style::SymbolPlacementType placement, const float placementAngle, const WritingModeType writingModes, - const Anchor& labelAnchor) { + const Anchor& labelAnchor, + PlacedSymbol& placedSymbol) { constexpr const uint16_t vertexLength = 4; const auto &tl = symbol.tl; @@ -594,6 +597,8 @@ void SymbolLayout::addSymbol(Buffer& buffer, segment.vertexLength += vertexLength; segment.indexLength += 6; + + placedSymbol.glyphOffsets.push_back(symbol.glyphOffset.x); } void SymbolLayout::addToDebugBuffers(CollisionTile& collisionTile, SymbolBucket& bucket) { diff --git a/src/mbgl/layout/symbol_layout.hpp b/src/mbgl/layout/symbol_layout.hpp index 37835bad14..661ea2a24d 100644 --- a/src/mbgl/layout/symbol_layout.hpp +++ b/src/mbgl/layout/symbol_layout.hpp @@ -20,6 +20,7 @@ class CollisionTile; class SymbolBucket; class Anchor; class RenderLayer; +class PlacedSymbol; namespace style { class Filter; @@ -72,7 +73,8 @@ private: const style::SymbolPlacementType, const float placementAngle, WritingModeType writingModes, - const Anchor& labelAnchor); + const Anchor& labelAnchor, + PlacedSymbol& placedSymbol); const std::string sourceLayerName; const std::string bucketName; diff --git a/src/mbgl/layout/symbol_projection.cpp b/src/mbgl/layout/symbol_projection.cpp index 41dd525646..2e3828fff9 100644 --- a/src/mbgl/layout/symbol_projection.cpp +++ b/src/mbgl/layout/symbol_projection.cpp @@ -62,6 +62,7 @@ namespace mbgl { } bool isVisible(const vec4& anchorPos, const float placementZoom, const std::array<double, 2>& clippingBuffer, const FrameHistory& frameHistory) { + if (true) return true; const float x = anchorPos[0] / anchorPos[3]; const float y = anchorPos[1] / anchorPos[3]; const bool inPaddedViewport = ( @@ -115,8 +116,8 @@ namespace mbgl { int32_t currentIndex = dir > 0 ? anchorSegment : anchorSegment + 1; - Point<float>& current = anchorPoint; - Point<float>& prev = anchorPoint; + Point<float> current = anchorPoint; + Point<float> prev = anchorPoint; float distanceToPrev = 0.0; float currentSegmentDistance = 0.0; const float absOffsetX = std::abs(combinedOffsetX); @@ -199,11 +200,9 @@ namespace mbgl { bool flip = false; if (values.keepUpright) { - if (false) { - const Point<float> a = project(convertPoint<float>(placedSymbol.line.at(placedSymbol.segment)), posMatrix); - const Point<float> b = project(convertPoint<float>(placedSymbol.line.at(placedSymbol.segment + 1)), posMatrix); - flip = placedSymbol.vertical ? b.y > a.y : b.x < a.x; - } + const Point<float> a = project(convertPoint<float>(placedSymbol.line.at(placedSymbol.segment)), posMatrix); + const Point<float> b = project(convertPoint<float>(placedSymbol.line.at(placedSymbol.segment + 1)), posMatrix); + flip = placedSymbol.vertical ? b.y > a.y : b.x < a.x; } const float cameraToAnchorDistance = anchorPos[3]; diff --git a/src/mbgl/renderer/buckets/symbol_bucket.hpp b/src/mbgl/renderer/buckets/symbol_bucket.hpp index e0bf830088..5f109bbddf 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.hpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.hpp @@ -29,8 +29,8 @@ public: float lineOffsetY; float placementZoom; bool vertical; - std::vector<float> glyphOffsets; GeometryCoordinates line; + std::vector<float> glyphOffsets; }; class SymbolBucket : public Bucket { |