diff options
author | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2018-10-29 08:28:35 +0200 |
---|---|---|
committer | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2018-11-19 14:06:21 +0200 |
commit | 767745e8b85bdeabde5781c87ac9c31a3617c4ff (patch) | |
tree | 6137326d78e760c992e9a1d585270a8943f9e94a /src | |
parent | a7274f66d06b061effe57b2aeff254b4f94ba248 (diff) | |
download | qtlocation-mapboxgl-767745e8b85bdeabde5781c87ac9c31a3617c4ff.tar.gz |
[core] Remove casts for Custom and Background render layers
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/renderer/layers/render_background_layer.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_background_layer.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/renderer/render_layer.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/render_layer.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/renderer_impl.cpp | 25 |
5 files changed, 26 insertions, 15 deletions
diff --git a/src/mbgl/renderer/layers/render_background_layer.cpp b/src/mbgl/renderer/layers/render_background_layer.cpp index f20bd7ae5e..3e510ef352 100644 --- a/src/mbgl/renderer/layers/render_background_layer.cpp +++ b/src/mbgl/renderer/layers/render_background_layer.cpp @@ -123,4 +123,12 @@ void RenderBackgroundLayer::render(PaintParameters& parameters, RenderSource*) { } } +optional<Color> RenderBackgroundLayer::getSolidBackground() const { + if (!evaluated.get<BackgroundPattern>().from.empty()) { + return nullopt; + } + + return { evaluated.get<BackgroundColor>() * evaluated.get<BackgroundOpacity>() }; +} + } // namespace mbgl diff --git a/src/mbgl/renderer/layers/render_background_layer.hpp b/src/mbgl/renderer/layers/render_background_layer.hpp index 854c077a62..fef9ad97b4 100644 --- a/src/mbgl/renderer/layers/render_background_layer.hpp +++ b/src/mbgl/renderer/layers/render_background_layer.hpp @@ -15,6 +15,7 @@ public: void evaluate(const PropertyEvaluationParameters&) override; bool hasTransition() const override; bool hasCrossfade() const override; + optional<Color> getSolidBackground() const final; void render(PaintParameters&, RenderSource*) override; std::unique_ptr<Bucket> createBucket(const BucketParameters&, const std::vector<const RenderLayer*>&) const override; diff --git a/src/mbgl/renderer/render_layer.cpp b/src/mbgl/renderer/render_layer.cpp index 71c7c54834..efd890eda8 100644 --- a/src/mbgl/renderer/render_layer.cpp +++ b/src/mbgl/renderer/render_layer.cpp @@ -90,6 +90,10 @@ void RenderLayer::update() { // no-op } +optional<Color> RenderLayer::getSolidBackground() const { + return nullopt; +} + RenderLayer::RenderTiles RenderLayer::filterRenderTiles(RenderTiles tiles, FilterFunctionPtr filterFn) const { assert(filterFn != nullptr); RenderTiles filtered; diff --git a/src/mbgl/renderer/render_layer.hpp b/src/mbgl/renderer/render_layer.hpp index dc7c58adeb..b335a468b0 100644 --- a/src/mbgl/renderer/render_layer.hpp +++ b/src/mbgl/renderer/render_layer.hpp @@ -101,6 +101,9 @@ public: // similar to color ramp. Temporarily moved to the base. virtual void update(); + // TODO: Only for background layers. + virtual optional<Color> getSolidBackground() const; + friend std::string layoutKey(const RenderLayer&); protected: diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index 4c25104e43..124c16cb64 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -218,9 +218,9 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { bool needsRelayout = false; for (const auto& layer : *layerImpls) { - if (layer->type == LayerType::Background || - layer->type == LayerType::Custom || - layer->source != source->id) { + + if (layer->getTypeInfo()->source == LayerTypeInfo::Source::NotRequired + || layer->source != source->id) { continue; } @@ -298,21 +298,16 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { continue; } - if (const RenderBackgroundLayer* background = layer->as<RenderBackgroundLayer>()) { - const BackgroundPaintProperties::PossiblyEvaluated& paint = background->evaluated; - if (parameters.contextMode == GLContextMode::Unique - && layerImpl.get() == layerImpls->at(0).get() - && paint.get<BackgroundPattern>().from.empty()) { - // This is a solid background. We can use glClear(). - backgroundColor = paint.get<BackgroundColor>() * paint.get<BackgroundOpacity>(); - } else { - // This is a textured background, or not the bottommost layer. We need to render it with a quad. - order.emplace_back(RenderItem { *layer, nullptr }); + if (parameters.contextMode == GLContextMode::Unique + && layerImpl.get() == layerImpls->at(0).get()) { + const auto& solidBackground = layer->getSolidBackground(); + if (solidBackground) { + backgroundColor = *solidBackground; + continue; } - continue; } - if (layer->is<RenderCustomLayer>()) { + if (layerImpl->getTypeInfo()->source == LayerTypeInfo::Source::NotRequired) { order.emplace_back(RenderItem { *layer, nullptr }); continue; } |