From 8b37a0704c7c20b1664fee3dfcc79139982a1ce7 Mon Sep 17 00:00:00 2001 From: Asheem Mamoowala Date: Wed, 31 May 2017 11:53:04 -0700 Subject: [core] Use fixed-size std::array for ImageSource coordinates --- src/mbgl/renderer/buckets/raster_bucket.cpp | 7 ++++--- src/mbgl/renderer/buckets/raster_bucket.hpp | 2 ++ src/mbgl/renderer/layers/render_raster_layer.cpp | 19 ++++--------------- src/mbgl/renderer/sources/render_image_source.cpp | 7 +++---- src/mbgl/renderer/sources/render_image_source.hpp | 7 ++----- 5 files changed, 15 insertions(+), 27 deletions(-) (limited to 'src/mbgl/renderer') diff --git a/src/mbgl/renderer/buckets/raster_bucket.cpp b/src/mbgl/renderer/buckets/raster_bucket.cpp index fa105fd38d..e0bfaf7b68 100644 --- a/src/mbgl/renderer/buckets/raster_bucket.cpp +++ b/src/mbgl/renderer/buckets/raster_bucket.cpp @@ -1,11 +1,12 @@ -#include -#include #include #include +#include #include +#include #include namespace mbgl { + using namespace style; RasterBucket::RasterBucket(UnassociatedImage&& image_) : image(std::move(image_)) { @@ -17,7 +18,7 @@ RasterBucket::RasterBucket(RasterBucket&& other) : image(std::move(other.image)) void RasterBucket::upload(gl::Context& context) { texture = context.createTexture(image); - if (vertices.vertexSize() > 0) { + if (!vertices.empty()) { vertexBuffer = context.createVertexBuffer(std::move(vertices)); indexBuffer = context.createIndexBuffer(std::move(indices)); } diff --git a/src/mbgl/renderer/buckets/raster_bucket.hpp b/src/mbgl/renderer/buckets/raster_bucket.hpp index b7b1d312dc..08afa6ddfa 100644 --- a/src/mbgl/renderer/buckets/raster_bucket.hpp +++ b/src/mbgl/renderer/buckets/raster_bucket.hpp @@ -27,6 +27,8 @@ public: UnassociatedImage image; optional texture; + // Bucket specific vertices are used for Image Sources only + // Raster Tile Sources use the default buffers from Painter gl::VertexVector vertices; gl::IndexVector indices; gl::SegmentVector segments; diff --git a/src/mbgl/renderer/layers/render_raster_layer.cpp b/src/mbgl/renderer/layers/render_raster_layer.cpp index 3551f9fa9a..49983462a3 100644 --- a/src/mbgl/renderer/layers/render_raster_layer.cpp +++ b/src/mbgl/renderer/layers/render_raster_layer.cpp @@ -37,14 +37,8 @@ bool RenderRasterLayer::hasTransition() const { } void RenderRasterLayer::uploadBuckets(gl::Context& context, RenderSource* source) { - if (renderTiles.size() > 0) { - for (const auto& tileRef : renderTiles) { - const auto& bucket = tileRef.get().tile.getBucket(impl()); - if (bucket && bucket->needsUpload()) { - bucket->upload(context); - } - } - } else { + RenderLayer::uploadBuckets(context, source); + if (renderTiles.size() == 0) { RenderImageSource* imageSource = dynamic_cast(source); if (imageSource) { imageSource->upload(context); @@ -53,13 +47,8 @@ void RenderRasterLayer::uploadBuckets(gl::Context& context, RenderSource* source } void RenderRasterLayer::render(Painter& painter, PaintParameters& parameters, RenderSource* source) { - if (renderTiles.size() > 0) { - for (auto& tileRef : renderTiles) { - auto& tile = tileRef.get(); - auto bucket = tile.tile.getBucket(impl()); - bucket->render(painter, parameters, *this, tile); - } - } else { + RenderLayer::render(painter, parameters, source); + if (renderTiles.size() == 0) { RenderImageSource* imageSource = dynamic_cast(source); if (imageSource) { imageSource->render(painter, parameters, *this); diff --git a/src/mbgl/renderer/sources/render_image_source.cpp b/src/mbgl/renderer/sources/render_image_source.cpp index 975b08eb47..3fec926b7f 100644 --- a/src/mbgl/renderer/sources/render_image_source.cpp +++ b/src/mbgl/renderer/sources/render_image_source.cpp @@ -16,6 +16,8 @@ RenderImageSource::RenderImageSource(Immutable impl_) : RenderSource(impl_), shouldRender(false) { } +RenderImageSource::~RenderImageSource() = default; + const style::ImageSource::Impl& RenderImageSource::impl() const { return static_cast(*baseImpl); } @@ -127,10 +129,7 @@ void RenderImageSource::updateTiles(const TileParameters& parameters) { auto gc = TileCoordinate::toGeometryCoordinate(tileIds[0], tc.p); geomCoords.push_back(gc); } - setupBucket(geomCoords); -} - -void RenderImageSource::setupBucket(GeometryCoordinates& geomCoords) { + if (!bucket) { UnassociatedImage img = impl().getImage().clone(); if (!img.valid()) { diff --git a/src/mbgl/renderer/sources/render_image_source.hpp b/src/mbgl/renderer/sources/render_image_source.hpp index 769f932f27..86c17b10fd 100644 --- a/src/mbgl/renderer/sources/render_image_source.hpp +++ b/src/mbgl/renderer/sources/render_image_source.hpp @@ -1,16 +1,13 @@ #pragma once -#include #include #include #include -#include -#include -#include namespace mbgl { class RenderLayer; class PaintParameters; +class RasterBucket; namespace gl { class Context; @@ -19,6 +16,7 @@ class Context; class RenderImageSource : public RenderSource { public: RenderImageSource(Immutable); + ~RenderImageSource() override; bool isLoaded() const final; void upload(gl::Context&); @@ -59,7 +57,6 @@ public: private: const style::ImageSource::Impl& impl() const; - void setupBucket(GeometryCoordinates& coordiantes); std::map tiles; std::vector tileIds; -- cgit v1.2.1