summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Shalamov <alexander.shalamov@mapbox.com>2018-10-29 08:28:35 +0200
committerAlexander Shalamov <alexander.shalamov@mapbox.com>2018-11-19 14:06:21 +0200
commit767745e8b85bdeabde5781c87ac9c31a3617c4ff (patch)
tree6137326d78e760c992e9a1d585270a8943f9e94a
parenta7274f66d06b061effe57b2aeff254b4f94ba248 (diff)
downloadqtlocation-mapboxgl-767745e8b85bdeabde5781c87ac9c31a3617c4ff.tar.gz
[core] Remove casts for Custom and Background render layers
-rw-r--r--src/mbgl/renderer/layers/render_background_layer.cpp8
-rw-r--r--src/mbgl/renderer/layers/render_background_layer.hpp1
-rw-r--r--src/mbgl/renderer/render_layer.cpp4
-rw-r--r--src/mbgl/renderer/render_layer.hpp3
-rw-r--r--src/mbgl/renderer/renderer_impl.cpp25
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;
}