diff options
author | Vladimir Agafonkin <agafonkin@gmail.com> | 2018-01-24 17:53:00 +0200 |
---|---|---|
committer | Vladimir Agafonkin <agafonkin@gmail.com> | 2018-01-24 17:53:00 +0200 |
commit | 739a02886c0f5e4fdcf885ccf8925a5888f86271 (patch) | |
tree | a42d11e6d4b8cbd210c9888ddd0b5d68ee4d0402 | |
parent | 2b844a7625fade90f5d23b907f5c36917362c4c8 (diff) | |
download | qtlocation-mapboxgl-upstream/heatmap-color-ramp.tar.gz |
working color ramp updatesupstream/heatmap-color-ramp
-rw-r--r-- | include/mbgl/style/heatmap_color_property_value.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_heatmap_layer.cpp | 9 | ||||
-rw-r--r-- | src/mbgl/renderer/renderer_impl.cpp | 16 |
3 files changed, 18 insertions, 9 deletions
diff --git a/include/mbgl/style/heatmap_color_property_value.hpp b/include/mbgl/style/heatmap_color_property_value.hpp index 796331206e..7d97b5e137 100644 --- a/include/mbgl/style/heatmap_color_property_value.hpp +++ b/include/mbgl/style/heatmap_color_property_value.hpp @@ -27,7 +27,7 @@ public: HeatmapColorPropertyValue() : value(nullptr) {} HeatmapColorPropertyValue(std::shared_ptr<expression::Expression> value_) : value(std::move(value_)) {} - bool isUndefined() const { return value.get() != nullptr; } + bool isUndefined() const { return value.get() == nullptr; } // noop, needed for batch evaluation of paint property values to compile template <typename Evaluator> diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.cpp b/src/mbgl/renderer/layers/render_heatmap_layer.cpp index efcfd05f38..b843566f28 100644 --- a/src/mbgl/renderer/layers/render_heatmap_layer.cpp +++ b/src/mbgl/renderer/layers/render_heatmap_layer.cpp @@ -5,6 +5,7 @@ #include <mbgl/programs/programs.hpp> #include <mbgl/programs/heatmap_program.hpp> #include <mbgl/tile/tile.hpp> +#include <mbgl/style/layers/heatmap_layer.hpp> #include <mbgl/style/layers/heatmap_layer_impl.hpp> #include <mbgl/geometry/feature_index.hpp> #include <mbgl/util/math.hpp> @@ -17,8 +18,6 @@ using namespace style; RenderHeatmapLayer::RenderHeatmapLayer(Immutable<style::HeatmapLayer::Impl> _impl) : RenderLayer(style::LayerType::Heatmap, _impl), unevaluated(impl().paint.untransitioned()) { - - updateColorRamp(); } const style::HeatmapLayer::Impl& RenderHeatmapLayer::impl() const { @@ -88,7 +87,11 @@ void RenderHeatmapLayer::render(PaintParameters& parameters, RenderSource*) { } void RenderHeatmapLayer::updateColorRamp() { - const auto colorValue = unevaluated.get<HeatmapColor>().getValue(); + auto colorValue = unevaluated.get<HeatmapColor>().getValue(); + if (colorValue.isUndefined()) { + colorValue = HeatmapLayer::getDefaultHeatmapColor(); + } + const auto size = colorRamp.size(); for (uint32_t i = 0; i < size; i += 4) { diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index aa138df662..65fa397714 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -14,6 +14,7 @@ #include <mbgl/renderer/layers/render_background_layer.hpp> #include <mbgl/renderer/layers/render_custom_layer.hpp> #include <mbgl/renderer/layers/render_fill_extrusion_layer.hpp> +#include <mbgl/renderer/layers/render_heatmap_layer.hpp> #include <mbgl/renderer/style_diff.hpp> #include <mbgl/renderer/query.hpp> #include <mbgl/renderer/backend_scope.hpp> @@ -90,9 +91,9 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { // Reset zoom history state. zoomHistory.first = true; } - + assert(BackendScope::exists()); - + updateParameters.annotationManager.updateData(); const bool zoomChanged = zoomHistory.update(updateParameters.transformState.getZoom(), updateParameters.timePoint); @@ -183,8 +184,13 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { if (layerAdded || layerChanged) { layer.transition(transitionParameters); + + if (layer.is<RenderHeatmapLayer>()) { + layer.as<RenderHeatmapLayer>()->updateColorRamp(); + } } + if (layerAdded || layerChanged || zoomChanged || layer.hasTransition()) { layer.evaluate(evaluationParameters); } @@ -393,7 +399,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { } placement->setRecent(parameters.timePoint); - + updateFadingTiles(); } else { placement->setStale(); @@ -416,7 +422,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { parameters.imageManager.upload(parameters.context, 0); parameters.lineAtlas.upload(parameters.context, 0); - + // Update all clipping IDs + upload buckets. for (const auto& entry : renderSources) { if (entry.second->isEnabled()) { @@ -760,7 +766,7 @@ bool Renderer::Impl::hasTransitions(TimePoint timePoint) const { if (placement->hasTransitions(timePoint)) { return true; } - + if (fadingTiles) { return true; } |