summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAsheem Mamoowala <asheem.mamoowala@mapbox.com>2018-11-05 14:50:18 -0800
committerAsheem Mamoowala <asheem.mamoowala@mapbox.com>2018-11-05 14:50:18 -0800
commit9f3cc7b7075b29595dec394733b10fbd26f274e4 (patch)
tree6de04a77c9b8c67b9b13a865bfc12e5281464271
parent3006f1b1f109bc777b937562cdfaf6c0454012ce (diff)
downloadqtlocation-mapboxgl-upstream/feature-state.tar.gz
-rw-r--r--src/mbgl/renderer/buckets/circle_bucket.cpp3
-rw-r--r--src/mbgl/renderer/buckets/line_bucket.cpp5
-rw-r--r--src/mbgl/renderer/buckets/line_bucket.hpp1
-rw-r--r--src/mbgl/renderer/paint_property_binder.hpp4
-rw-r--r--src/mbgl/renderer/sources/render_vector_source.cpp16
-rw-r--r--src/mbgl/renderer/sources/render_vector_source.hpp7
-rw-r--r--src/mbgl/renderer/tile_pyramid.cpp5
7 files changed, 11 insertions, 30 deletions
diff --git a/src/mbgl/renderer/buckets/circle_bucket.cpp b/src/mbgl/renderer/buckets/circle_bucket.cpp
index 20c40eb0cb..cef5682430 100644
--- a/src/mbgl/renderer/buckets/circle_bucket.cpp
+++ b/src/mbgl/renderer/buckets/circle_bucket.cpp
@@ -101,7 +101,7 @@ void CircleBucket::addFeature(const GeometryTileFeature& feature,
void CircleBucket::setFeatureState(const GeometryTileData* tileData,
const std::string& sourceLayer,
const FeatureStates& featureStates) {
- if (featureStates.empty() /*|| stateDependentLayers.empty()*/) { return; }
+ if (featureStates.empty() || stateDependentLayers.empty()) { return; }
auto sourceLayerData = tileData->getLayer(sourceLayer);
if (sourceLayerData) {
@@ -115,6 +115,7 @@ void CircleBucket::setFeatureState(const GeometryTileData* tileData,
}
}
}
+
template <class Property>
static float get(const RenderCircleLayer& layer, const std::map<std::string, CircleProgram::PaintPropertyBinders>& paintPropertyBinders) {
auto it = paintPropertyBinders.find(layer.getID());
diff --git a/src/mbgl/renderer/buckets/line_bucket.cpp b/src/mbgl/renderer/buckets/line_bucket.cpp
index 1af36e87bc..8b49387825 100644
--- a/src/mbgl/renderer/buckets/line_bucket.cpp
+++ b/src/mbgl/renderer/buckets/line_bucket.cpp
@@ -61,7 +61,10 @@ void LineBucket::setFeatureState(const GeometryTileData* tileData,
if (sourceLayerData) {
for (auto& pair : paintPropertyBinders) {
if (stateDependentLayers.count(pair.first) > 0) {
- pair.second.updateVertexVectors(featureStates, *sourceLayerData);
+ if(pair.second.updateVertexVectors(featureStates, *sourceLayerData)) {
+ //Only toggle uploaded if needed.
+ uploaded = false;
+ }
}
}
}
diff --git a/src/mbgl/renderer/buckets/line_bucket.hpp b/src/mbgl/renderer/buckets/line_bucket.hpp
index 58ec00de22..6596d9d8a6 100644
--- a/src/mbgl/renderer/buckets/line_bucket.hpp
+++ b/src/mbgl/renderer/buckets/line_bucket.hpp
@@ -53,7 +53,6 @@ public:
optional<gl::VertexBuffer<LineLayoutVertex>> vertexBuffer;
optional<gl::IndexBuffer<gl::Triangles>> indexBuffer;
- //TODO: AHM: Can these two be combined? Also need to store if bucket needs to be re-uploaded
std::map<std::string, LineProgram::PaintPropertyBinders> paintPropertyBinders;
std::set<std::string> stateDependentLayers;
private:
diff --git a/src/mbgl/renderer/paint_property_binder.hpp b/src/mbgl/renderer/paint_property_binder.hpp
index b3d60e3d6e..95a02ae80e 100644
--- a/src/mbgl/renderer/paint_property_binder.hpp
+++ b/src/mbgl/renderer/paint_property_binder.hpp
@@ -394,8 +394,8 @@ public:
void updateVertexVector(size_t, size_t, const GeometryTileFeature&, const PropertyMap&) override {
if (!isUpdateable) return;
- //TODO: AHM: How to evaluate expression with feature-state to determine
- // patterns and pattern positions synchronously
+ //TODO: AHM: How to evaluate expressions with feature-state to determine
+ // patterns and pattern positions synchronously?
};
std::tuple<optional<gl::AttributeBinding>, optional<gl::AttributeBinding>> attributeBinding(const PossiblyEvaluatedPropertyValue<Faded<T>>& currentValue) const override {
diff --git a/src/mbgl/renderer/sources/render_vector_source.cpp b/src/mbgl/renderer/sources/render_vector_source.cpp
index aa1e18acd7..4de4f01e3f 100644
--- a/src/mbgl/renderer/sources/render_vector_source.cpp
+++ b/src/mbgl/renderer/sources/render_vector_source.cpp
@@ -25,7 +25,6 @@ bool RenderVectorSource::isLoaded() const {
void RenderVectorSource::update(Immutable<style::Source::Impl> baseImpl_,
const std::vector<Immutable<Layer::Impl>>& layers,
- const FeatureStatesMap& newStates,
const bool needsRendering,
const bool needsRelayout,
const TileParameters& parameters) {
@@ -51,7 +50,6 @@ void RenderVectorSource::update(Immutable<style::Source::Impl> baseImpl_,
}
tilePyramid.update(layers,
- newStates,
needsRendering,
needsRelayout,
parameters,
@@ -64,20 +62,6 @@ void RenderVectorSource::update(Immutable<style::Source::Impl> baseImpl_,
});
}
-
-void RenderVectorSource::update(Immutable<style::Source::Impl> baseImpl_,
- const std::vector<Immutable<Layer::Impl>>& layers,
- const bool needsRendering,
- const bool needsRelayout,
- const TileParameters& parameters) {
- update(baseImpl_,
- layers,
- {},
- needsRendering,
- needsRelayout,
- parameters);
-}
-
void RenderVectorSource::startRender(PaintParameters& parameters) {
parameters.clipIDGenerator.update(tilePyramid.getRenderTiles());
tilePyramid.startRender(parameters);
diff --git a/src/mbgl/renderer/sources/render_vector_source.hpp b/src/mbgl/renderer/sources/render_vector_source.hpp
index 8b1712c020..6da95b6dc5 100644
--- a/src/mbgl/renderer/sources/render_vector_source.hpp
+++ b/src/mbgl/renderer/sources/render_vector_source.hpp
@@ -15,13 +15,6 @@ public:
void update(Immutable<style::Source::Impl>,
const std::vector<Immutable<style::Layer::Impl>>&,
- const FeatureStatesMap&,
- bool needsRendering,
- bool needsRelayout,
- const TileParameters&);
-
- void update(Immutable<style::Source::Impl>,
- const std::vector<Immutable<style::Layer::Impl>>&,
bool needsRendering,
bool needsRelayout,
const TileParameters&) final;
diff --git a/src/mbgl/renderer/tile_pyramid.cpp b/src/mbgl/renderer/tile_pyramid.cpp
index 361b996640..b23adbec6e 100644
--- a/src/mbgl/renderer/tile_pyramid.cpp
+++ b/src/mbgl/renderer/tile_pyramid.cpp
@@ -71,9 +71,10 @@ void TilePyramid::update(const std::vector<Immutable<style::Layer::Impl>>& layer
const Range<uint8_t> zoomRange,
optional<LatLngBounds> bounds,
std::function<std::unique_ptr<Tile> (const OverscaledTileID&)> createTile) {
- update(layers, {}, needsRendering, needsRelayout, parameters, type, tileSize, zoomRange, bounds, createTile);
-}
+ FeatureStatesMap fsm;
+ update(layers,fsm, needsRendering, needsRelayout, parameters, type, tileSize, zoomRange, bounds, createTile);
+}
void extend(PropertyMap& a, const PropertyMap& b) {
for (const auto& pair: b) {
auto it = a.find(pair.first);