summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2017-06-08 14:44:47 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2017-06-13 10:18:43 -0700
commitf5d3b850bff06e3cd4d4bcff288dceeb53cfa82d (patch)
treee1db4a34ec7adc09d5df8f14a2c97858ef11c02c
parent17db460345aeab21000cf7c18c9dea8d1543d835 (diff)
downloadqtlocation-mapboxgl-f5d3b850bff06e3cd4d4bcff288dceeb53cfa82d.tar.gz
[core] Merge RenderLayer::uploadBuckets into RenderSource::startRender
-rw-r--r--src/mbgl/renderer/layers/render_raster_layer.cpp10
-rw-r--r--src/mbgl/renderer/layers/render_raster_layer.hpp3
-rw-r--r--src/mbgl/renderer/painter.cpp4
-rw-r--r--src/mbgl/renderer/render_layer.cpp9
-rw-r--r--src/mbgl/renderer/render_layer.hpp4
-rw-r--r--src/mbgl/renderer/render_tile.cpp3
-rw-r--r--src/mbgl/renderer/sources/render_image_source.cpp12
-rw-r--r--src/mbgl/renderer/sources/render_image_source.hpp1
-rw-r--r--src/mbgl/tile/geometry_tile.cpp16
-rw-r--r--src/mbgl/tile/geometry_tile.hpp1
-rw-r--r--src/mbgl/tile/raster_tile.cpp6
-rw-r--r--src/mbgl/tile/raster_tile.hpp2
-rw-r--r--src/mbgl/tile/tile.hpp5
13 files changed, 41 insertions, 35 deletions
diff --git a/src/mbgl/renderer/layers/render_raster_layer.cpp b/src/mbgl/renderer/layers/render_raster_layer.cpp
index 28cf722c14..30b506b63b 100644
--- a/src/mbgl/renderer/layers/render_raster_layer.cpp
+++ b/src/mbgl/renderer/layers/render_raster_layer.cpp
@@ -36,16 +36,6 @@ bool RenderRasterLayer::hasTransition() const {
return unevaluated.hasTransition();
}
-void RenderRasterLayer::uploadBuckets(gl::Context& context, RenderSource* source) {
- RenderLayer::uploadBuckets(context, source);
- if (renderTiles.empty()) {
- RenderImageSource* imageSource = source->as<RenderImageSource>();
- if (imageSource) {
- imageSource->upload(context);
- }
- }
-}
-
void RenderRasterLayer::render(Painter& painter, PaintParameters& parameters, RenderSource* source) {
RenderLayer::render(painter, parameters, source);
if (renderTiles.empty()) {
diff --git a/src/mbgl/renderer/layers/render_raster_layer.hpp b/src/mbgl/renderer/layers/render_raster_layer.hpp
index f252d80242..ce46152a95 100644
--- a/src/mbgl/renderer/layers/render_raster_layer.hpp
+++ b/src/mbgl/renderer/layers/render_raster_layer.hpp
@@ -15,8 +15,7 @@ public:
void evaluate(const PropertyEvaluationParameters&) override;
bool hasTransition() const override;
- void uploadBuckets(gl::Context&, RenderSource*) override;
- void render(Painter& , PaintParameters& , RenderSource*) override;
+ void render(Painter&, PaintParameters&, RenderSource*) override;
std::unique_ptr<Bucket> createBucket(const BucketParameters&, const std::vector<const RenderLayer*>&) const override;
diff --git a/src/mbgl/renderer/painter.cpp b/src/mbgl/renderer/painter.cpp
index 15aaa9c002..e04d25d06a 100644
--- a/src/mbgl/renderer/painter.cpp
+++ b/src/mbgl/renderer/painter.cpp
@@ -174,10 +174,6 @@ void Painter::render(RenderStyle& style, const FrameData& frame_, View& view) {
lineAtlas->upload(context, 0);
glyphAtlas->upload(context, 0);
frameHistory.upload(context, 0);
-
- for (const auto& item : order) {
- item.layer.uploadBuckets(context, item.source);
- }
}
// - CLEAR -------------------------------------------------------------------------------------
diff --git a/src/mbgl/renderer/render_layer.cpp b/src/mbgl/renderer/render_layer.cpp
index 4bffb87cf1..3f9d68003e 100644
--- a/src/mbgl/renderer/render_layer.cpp
+++ b/src/mbgl/renderer/render_layer.cpp
@@ -68,15 +68,6 @@ void RenderLayer::setRenderTiles(std::vector<std::reference_wrapper<RenderTile>>
renderTiles = std::move(tiles);
}
-void RenderLayer::uploadBuckets(gl::Context& context, RenderSource*) {
- for (const auto& tileRef : renderTiles) {
- const auto& bucket = tileRef.get().tile.getBucket(*baseImpl);
- if (bucket && bucket->needsUpload()) {
- bucket->upload(context);
- }
- }
-}
-
void RenderLayer::render(Painter& painter, PaintParameters& parameters, RenderSource*) {
for (auto& tileRef : renderTiles) {
auto& tile = tileRef.get();
diff --git a/src/mbgl/renderer/render_layer.hpp b/src/mbgl/renderer/render_layer.hpp
index ce71794c07..50ad4c771a 100644
--- a/src/mbgl/renderer/render_layer.hpp
+++ b/src/mbgl/renderer/render_layer.hpp
@@ -66,8 +66,8 @@ public:
// Checks whether this layer can be rendered.
bool needsRendering(float zoom) const;
- virtual void uploadBuckets(gl::Context&, RenderSource* source);
- virtual void render(Painter& , PaintParameters& , RenderSource* source);
+ virtual void render(Painter&, PaintParameters&, RenderSource*);
+
// Check wether the given geometry intersects
// with the feature
virtual bool queryIntersectsFeature(
diff --git a/src/mbgl/renderer/render_tile.cpp b/src/mbgl/renderer/render_tile.cpp
index 3f6b270a95..59c3ea076b 100644
--- a/src/mbgl/renderer/render_tile.cpp
+++ b/src/mbgl/renderer/render_tile.cpp
@@ -1,6 +1,7 @@
#include <mbgl/renderer/render_tile.hpp>
#include <mbgl/renderer/painter.hpp>
#include <mbgl/map/transform_state.hpp>
+#include <mbgl/tile/tile.hpp>
namespace mbgl {
@@ -46,6 +47,8 @@ mat4 RenderTile::translatedClipMatrix(const std::array<float, 2>& translation,
}
void RenderTile::startRender(Painter& painter) {
+ tile.upload(painter.context);
+
// Calculate two matrices for this tile: matrix is the standard tile matrix; nearClippedMatrix
// clips the near plane to 100 to save depth buffer precision
painter.state.matrixFor(matrix, id);
diff --git a/src/mbgl/renderer/sources/render_image_source.cpp b/src/mbgl/renderer/sources/render_image_source.cpp
index 82ddd318bd..7fb7caa580 100644
--- a/src/mbgl/renderer/sources/render_image_source.cpp
+++ b/src/mbgl/renderer/sources/render_image_source.cpp
@@ -27,10 +27,10 @@ bool RenderImageSource::isLoaded() const {
}
void RenderImageSource::startRender(Painter& painter) {
-
if (!isLoaded()) {
return;
}
+
matrices.clear();
for (size_t i = 0; i < tileIds.size(); i++) {
@@ -40,6 +40,10 @@ void RenderImageSource::startRender(Painter& painter) {
matrix::multiply(matrix, painter.projMatrix, matrix);
matrices.push_back(matrix);
}
+
+ if (bucket->needsUpload() && shouldRender) {
+ bucket->upload(painter.context);
+ }
}
void RenderImageSource::finishRender(Painter& painter) {
@@ -63,12 +67,6 @@ std::vector<Feature> RenderImageSource::querySourceFeatures(const SourceQueryOpt
return {};
}
-void RenderImageSource::upload(gl::Context& context) {
- if (isLoaded() && bucket->needsUpload() && shouldRender) {
- bucket->upload(context);
- }
-}
-
void RenderImageSource::update(Immutable<style::Source::Impl> baseImpl_,
const std::vector<Immutable<Layer::Impl>>&,
const bool needsRendering,
diff --git a/src/mbgl/renderer/sources/render_image_source.hpp b/src/mbgl/renderer/sources/render_image_source.hpp
index 175330b35f..5175cbf4a4 100644
--- a/src/mbgl/renderer/sources/render_image_source.hpp
+++ b/src/mbgl/renderer/sources/render_image_source.hpp
@@ -19,7 +19,6 @@ public:
~RenderImageSource() override;
bool isLoaded() const final;
- void upload(gl::Context&);
void startRender(Painter&) final;
void render(Painter&, PaintParameters&, const RenderLayer&);
diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp
index 32fb6148c2..c35fe42f6a 100644
--- a/src/mbgl/tile/geometry_tile.cpp
+++ b/src/mbgl/tile/geometry_tile.cpp
@@ -161,6 +161,22 @@ void GeometryTile::getIcons(IconDependencies iconDependencies) {
spriteAtlas.getIcons(*this, std::move(iconDependencies));
}
+void GeometryTile::upload(gl::Context& context) {
+ auto upload = [&] (Bucket& bucket) {
+ if (bucket.needsUpload()) {
+ bucket.upload(context);
+ }
+ };
+
+ for (auto& entry : nonSymbolBuckets) {
+ upload(*entry.second);
+ }
+
+ for (auto& entry : symbolBuckets) {
+ upload(*entry.second);
+ }
+}
+
Bucket* GeometryTile::getBucket(const Layer::Impl& layer) const {
const auto& buckets = layer.type == LayerType::Symbol ? symbolBuckets : nonSymbolBuckets;
const auto it = buckets.find(layer.id);
diff --git a/src/mbgl/tile/geometry_tile.hpp b/src/mbgl/tile/geometry_tile.hpp
index c6d0bb35ec..e92d2f4975 100644
--- a/src/mbgl/tile/geometry_tile.hpp
+++ b/src/mbgl/tile/geometry_tile.hpp
@@ -44,6 +44,7 @@ public:
void getGlyphs(GlyphDependencies);
void getIcons(IconDependencies);
+ void upload(gl::Context&) override;
Bucket* getBucket(const style::Layer::Impl&) const override;
void queryRenderedFeatures(
diff --git a/src/mbgl/tile/raster_tile.cpp b/src/mbgl/tile/raster_tile.cpp
index bd27ae63ca..8a92c40e4a 100644
--- a/src/mbgl/tile/raster_tile.cpp
+++ b/src/mbgl/tile/raster_tile.cpp
@@ -55,6 +55,12 @@ void RasterTile::onError(std::exception_ptr err) {
observer->onTileError(*this, err);
}
+void RasterTile::upload(gl::Context& context) {
+ if (bucket) {
+ bucket->upload(context);
+ }
+}
+
Bucket* RasterTile::getBucket(const style::Layer::Impl&) const {
return bucket.get();
}
diff --git a/src/mbgl/tile/raster_tile.hpp b/src/mbgl/tile/raster_tile.hpp
index b4804bdb7d..51075a2dbc 100644
--- a/src/mbgl/tile/raster_tile.hpp
+++ b/src/mbgl/tile/raster_tile.hpp
@@ -29,6 +29,8 @@ public:
optional<Timestamp> expires_);
void cancel() override;
+
+ void upload(gl::Context&) override;
Bucket* getBucket(const style::Layer::Impl&) const override;
void onParsed(std::unique_ptr<Bucket> result);
diff --git a/src/mbgl/tile/tile.hpp b/src/mbgl/tile/tile.hpp
index bddae5138b..a925d88af3 100644
--- a/src/mbgl/tile/tile.hpp
+++ b/src/mbgl/tile/tile.hpp
@@ -26,6 +26,10 @@ class RenderStyle;
class RenderedQueryOptions;
class SourceQueryOptions;
+namespace gl {
+class Context;
+} // namespace gl
+
class Tile : private util::noncopyable {
public:
Tile(OverscaledTileID);
@@ -45,6 +49,7 @@ public:
// Mark this tile as no longer needed and cancel any pending work.
virtual void cancel() = 0;
+ virtual void upload(gl::Context&) = 0;
virtual Bucket* getBucket(const style::Layer::Impl&) const = 0;
virtual void setPlacementConfig(const PlacementConfig&) {}