From b46ad8480ccf87f73667b19bcb940dcc95884034 Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Sun, 19 May 2019 18:20:31 +0300 Subject: [core] RenderLayer::render(PaintParameters, RenderSource*) -> render(PaintParameters) --- include/mbgl/util/constants.hpp | 2 + .../renderer/layers/render_background_layer.cpp | 2 +- .../renderer/layers/render_background_layer.hpp | 2 +- src/mbgl/renderer/layers/render_circle_layer.cpp | 2 +- src/mbgl/renderer/layers/render_circle_layer.hpp | 2 +- src/mbgl/renderer/layers/render_custom_layer.cpp | 2 +- src/mbgl/renderer/layers/render_custom_layer.hpp | 2 +- .../layers/render_fill_extrusion_layer.cpp | 2 +- .../layers/render_fill_extrusion_layer.hpp | 2 +- src/mbgl/renderer/layers/render_fill_layer.cpp | 2 +- src/mbgl/renderer/layers/render_fill_layer.hpp | 2 +- src/mbgl/renderer/layers/render_heatmap_layer.cpp | 2 +- src/mbgl/renderer/layers/render_heatmap_layer.hpp | 2 +- .../renderer/layers/render_hillshade_layer.cpp | 15 +++++--- .../renderer/layers/render_hillshade_layer.hpp | 4 +- src/mbgl/renderer/layers/render_line_layer.cpp | 2 +- src/mbgl/renderer/layers/render_line_layer.hpp | 2 +- src/mbgl/renderer/layers/render_raster_layer.cpp | 44 +++++++++++++--------- src/mbgl/renderer/layers/render_raster_layer.hpp | 6 ++- src/mbgl/renderer/layers/render_symbol_layer.cpp | 2 +- src/mbgl/renderer/layers/render_symbol_layer.hpp | 2 +- src/mbgl/renderer/paint_parameters.cpp | 2 +- src/mbgl/renderer/render_layer.hpp | 2 +- src/mbgl/renderer/renderer_impl.cpp | 6 +-- src/mbgl/renderer/sources/render_image_source.cpp | 41 ++++++++++---------- src/mbgl/renderer/sources/render_image_source.hpp | 10 +++-- 26 files changed, 92 insertions(+), 72 deletions(-) diff --git a/include/mbgl/util/constants.hpp b/include/mbgl/util/constants.hpp index f7799a953f..0e010bfa14 100644 --- a/include/mbgl/util/constants.hpp +++ b/include/mbgl/util/constants.hpp @@ -57,6 +57,8 @@ constexpr int DEFAULT_RATE_LIMIT_TIMEOUT = 5; constexpr const char* API_BASE_URL = "https://api.mapbox.com"; +constexpr uint8_t TERRAIN_RGB_MAXZOOM = 15; + } // namespace util namespace debug { diff --git a/src/mbgl/renderer/layers/render_background_layer.cpp b/src/mbgl/renderer/layers/render_background_layer.cpp index 51c4f2ae4f..37386c2532 100644 --- a/src/mbgl/renderer/layers/render_background_layer.cpp +++ b/src/mbgl/renderer/layers/render_background_layer.cpp @@ -61,7 +61,7 @@ void RenderBackgroundLayer::upload(gfx::UploadPass&, UploadParameters& parameter } } -void RenderBackgroundLayer::render(PaintParameters& parameters, RenderSource*) { +void RenderBackgroundLayer::render(PaintParameters& parameters) { // Note that for bottommost layers without a pattern, the background color is drawn with // glClear rather than this method. diff --git a/src/mbgl/renderer/layers/render_background_layer.hpp b/src/mbgl/renderer/layers/render_background_layer.hpp index 248a3e1457..7dcbdc0b80 100644 --- a/src/mbgl/renderer/layers/render_background_layer.hpp +++ b/src/mbgl/renderer/layers/render_background_layer.hpp @@ -18,7 +18,7 @@ private: bool hasCrossfade() const override; optional getSolidBackground() const override; void upload(gfx::UploadPass&, UploadParameters&) override; - void render(PaintParameters&, RenderSource*) override; + void render(PaintParameters&) override; // Paint properties style::BackgroundPaintProperties::Unevaluated unevaluated; diff --git a/src/mbgl/renderer/layers/render_circle_layer.cpp b/src/mbgl/renderer/layers/render_circle_layer.cpp index 7c922c51ad..b5bbc4b22e 100644 --- a/src/mbgl/renderer/layers/render_circle_layer.cpp +++ b/src/mbgl/renderer/layers/render_circle_layer.cpp @@ -52,7 +52,7 @@ bool RenderCircleLayer::hasCrossfade() const { return false; } -void RenderCircleLayer::render(PaintParameters& parameters, RenderSource*) { +void RenderCircleLayer::render(PaintParameters& parameters) { if (parameters.pass == RenderPass::Opaque) { return; } diff --git a/src/mbgl/renderer/layers/render_circle_layer.hpp b/src/mbgl/renderer/layers/render_circle_layer.hpp index fbe67c91ac..9348e48929 100644 --- a/src/mbgl/renderer/layers/render_circle_layer.hpp +++ b/src/mbgl/renderer/layers/render_circle_layer.hpp @@ -16,7 +16,7 @@ private: void evaluate(const PropertyEvaluationParameters&) override; bool hasTransition() const override; bool hasCrossfade() const override; - void render(PaintParameters&, RenderSource*) override; + void render(PaintParameters&) override; bool queryIntersectsFeature( const GeometryCoordinates&, diff --git a/src/mbgl/renderer/layers/render_custom_layer.cpp b/src/mbgl/renderer/layers/render_custom_layer.cpp index 4148de1ddd..1371326963 100644 --- a/src/mbgl/renderer/layers/render_custom_layer.cpp +++ b/src/mbgl/renderer/layers/render_custom_layer.cpp @@ -50,7 +50,7 @@ void RenderCustomLayer::markContextDestroyed() { contextDestroyed = true; } -void RenderCustomLayer::render(PaintParameters& paintParameters, RenderSource*) { +void RenderCustomLayer::render(PaintParameters& paintParameters) { if (host != impl(baseImpl).host) { //If the context changed, deinitialize the previous one before initializing the new one. if (host && !contextDestroyed) { diff --git a/src/mbgl/renderer/layers/render_custom_layer.hpp b/src/mbgl/renderer/layers/render_custom_layer.hpp index 0c364cfc0c..32450e643f 100644 --- a/src/mbgl/renderer/layers/render_custom_layer.hpp +++ b/src/mbgl/renderer/layers/render_custom_layer.hpp @@ -17,7 +17,7 @@ private: bool hasCrossfade() const override; void markContextDestroyed() override; - void render(PaintParameters&, RenderSource*) override; + void render(PaintParameters&) override; bool contextDestroyed = false; std::shared_ptr host; diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp index 6c2d049948..a21f62c6a6 100644 --- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp @@ -55,7 +55,7 @@ bool RenderFillExtrusionLayer::hasCrossfade() const { return getCrossfade(evaluatedProperties).t != 1; } -void RenderFillExtrusionLayer::render(PaintParameters& parameters, RenderSource*) { +void RenderFillExtrusionLayer::render(PaintParameters& parameters) { if (parameters.pass != RenderPass::Translucent) { return; } diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp index fa50ac6f2c..9118601581 100644 --- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp +++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp @@ -17,7 +17,7 @@ private: void evaluate(const PropertyEvaluationParameters&) override; bool hasTransition() const override; bool hasCrossfade() const override; - void render(PaintParameters&, RenderSource*) override; + void render(PaintParameters&) override; bool queryIntersectsFeature( const GeometryCoordinates&, diff --git a/src/mbgl/renderer/layers/render_fill_layer.cpp b/src/mbgl/renderer/layers/render_fill_layer.cpp index ec446136dc..cea40602d0 100644 --- a/src/mbgl/renderer/layers/render_fill_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_layer.cpp @@ -72,7 +72,7 @@ bool RenderFillLayer::hasCrossfade() const { return getCrossfade(evaluatedProperties).t != 1; } -void RenderFillLayer::render(PaintParameters& parameters, RenderSource*) { +void RenderFillLayer::render(PaintParameters& parameters) { if (unevaluated.get().isUndefined()) { parameters.renderTileClippingMasks(renderTiles); for (const RenderTile& tile : renderTiles) { diff --git a/src/mbgl/renderer/layers/render_fill_layer.hpp b/src/mbgl/renderer/layers/render_fill_layer.hpp index 5d5206efe2..79adc9dab4 100644 --- a/src/mbgl/renderer/layers/render_fill_layer.hpp +++ b/src/mbgl/renderer/layers/render_fill_layer.hpp @@ -19,7 +19,7 @@ private: void evaluate(const PropertyEvaluationParameters&) override; bool hasTransition() const override; bool hasCrossfade() const override; - void render(PaintParameters&, RenderSource*) override; + void render(PaintParameters&) override; bool queryIntersectsFeature( const GeometryCoordinates&, diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.cpp b/src/mbgl/renderer/layers/render_heatmap_layer.cpp index 053503bbaa..2c071d1fcf 100644 --- a/src/mbgl/renderer/layers/render_heatmap_layer.cpp +++ b/src/mbgl/renderer/layers/render_heatmap_layer.cpp @@ -62,7 +62,7 @@ void RenderHeatmapLayer::upload(gfx::UploadPass& uploadPass, UploadParameters&) } } -void RenderHeatmapLayer::render(PaintParameters& parameters, RenderSource*) { +void RenderHeatmapLayer::render(PaintParameters& parameters) { if (parameters.pass == RenderPass::Opaque) { return; } diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.hpp b/src/mbgl/renderer/layers/render_heatmap_layer.hpp index f4c0299dd9..f331ef8435 100644 --- a/src/mbgl/renderer/layers/render_heatmap_layer.hpp +++ b/src/mbgl/renderer/layers/render_heatmap_layer.hpp @@ -20,7 +20,7 @@ private: bool hasTransition() const override; bool hasCrossfade() const override; void upload(gfx::UploadPass&, UploadParameters&) override; - void render(PaintParameters&, RenderSource*) override; + void render(PaintParameters&) override; bool queryIntersectsFeature( const GeometryCoordinates&, diff --git a/src/mbgl/renderer/layers/render_hillshade_layer.cpp b/src/mbgl/renderer/layers/render_hillshade_layer.cpp index a13de7c4cd..b271cd478f 100644 --- a/src/mbgl/renderer/layers/render_hillshade_layer.cpp +++ b/src/mbgl/renderer/layers/render_hillshade_layer.cpp @@ -65,14 +65,17 @@ bool RenderHillshadeLayer::hasCrossfade() const { return false; } -void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src) { +void RenderHillshadeLayer::prepare(const LayerPrepareParameters& params) { + RenderLayer::prepare(params); + if (auto* demsrc = params.source->as()) { + maxzoom = demsrc->getMaxZoom(); + } +} + +void RenderHillshadeLayer::render(PaintParameters& parameters) { if (parameters.pass != RenderPass::Translucent && parameters.pass != RenderPass::Pass3D) return; - const auto& evaluated = static_cast(*evaluatedProperties).evaluated; - auto* demsrc = static_cast(src); - const uint8_t TERRAIN_RGB_MAXZOOM = 15; - const uint8_t maxzoom = demsrc != nullptr ? demsrc->getMaxZoom() : TERRAIN_RGB_MAXZOOM; - + const auto& evaluated = static_cast(*evaluatedProperties).evaluated; auto draw = [&] (const mat4& matrix, const auto& vertexBuffer, const auto& indexBuffer, diff --git a/src/mbgl/renderer/layers/render_hillshade_layer.hpp b/src/mbgl/renderer/layers/render_hillshade_layer.hpp index 7c7bc10835..61f5c507a9 100644 --- a/src/mbgl/renderer/layers/render_hillshade_layer.hpp +++ b/src/mbgl/renderer/layers/render_hillshade_layer.hpp @@ -18,10 +18,12 @@ private: bool hasTransition() const override; bool hasCrossfade() const override; - void render(PaintParameters&, RenderSource* src) override; + void render(PaintParameters&) override; + void prepare(const LayerPrepareParameters&) override; // Paint properties style::HillshadePaintProperties::Unevaluated unevaluated; + uint8_t maxzoom = util::TERRAIN_RGB_MAXZOOM; const std::array getLatRange(const UnwrappedTileID& id); const std::array getLight(const PaintParameters& parameters); diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp index bfb6ac619e..5b98c75a3e 100644 --- a/src/mbgl/renderer/layers/render_line_layer.cpp +++ b/src/mbgl/renderer/layers/render_line_layer.cpp @@ -91,7 +91,7 @@ void RenderLineLayer::upload(gfx::UploadPass& uploadPass, UploadParameters& uplo } } -void RenderLineLayer::render(PaintParameters& parameters, RenderSource*) { +void RenderLineLayer::render(PaintParameters& parameters) { if (parameters.pass == RenderPass::Opaque) { return; } diff --git a/src/mbgl/renderer/layers/render_line_layer.hpp b/src/mbgl/renderer/layers/render_line_layer.hpp index 0e1e81e557..f57686e1c8 100644 --- a/src/mbgl/renderer/layers/render_line_layer.hpp +++ b/src/mbgl/renderer/layers/render_line_layer.hpp @@ -21,7 +21,7 @@ private: bool hasTransition() const override; bool hasCrossfade() const override; void upload(gfx::UploadPass&, UploadParameters&) override; - void render(PaintParameters&, RenderSource*) override; + void render(PaintParameters&) override; bool queryIntersectsFeature( const GeometryCoordinates&, diff --git a/src/mbgl/renderer/layers/render_raster_layer.cpp b/src/mbgl/renderer/layers/render_raster_layer.cpp index ce4fb05929..ade5cbb4e1 100644 --- a/src/mbgl/renderer/layers/render_raster_layer.cpp +++ b/src/mbgl/renderer/layers/render_raster_layer.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include #include #include @@ -73,7 +72,18 @@ static std::array spinWeights(float spin) { return spin_weights; } -void RenderRasterLayer::render(PaintParameters& parameters, RenderSource* source) { +void RenderRasterLayer::prepare(const LayerPrepareParameters& params) { + RenderLayer::prepare(params); + auto* imageSource = params.source->as(); + if (imageSource && imageSource->isLoaded()) { + assert(imageSource->isEnabled()); + assert(imageSource->sharedData.bucket); + assert(imageSource->sharedData.matrices); + imageData = imageSource->sharedData; + } +} + +void RenderRasterLayer::render(PaintParameters& parameters) { if (parameters.pass != RenderPass::Translucent) return; const auto& evaluated = static_cast(*evaluatedProperties).evaluated; @@ -132,22 +142,20 @@ void RenderRasterLayer::render(PaintParameters& parameters, RenderSource* source const gfx::TextureFilterType filter = evaluated.get() == RasterResamplingType::Nearest ? gfx::TextureFilterType::Nearest : gfx::TextureFilterType::Linear; - if (auto* imageSource = source->as()) { - if (imageSource->isEnabled() && imageSource->isLoaded() && !imageSource->bucket->needsUpload()) { - RasterBucket& bucket = *imageSource->bucket; - assert(bucket.texture); - - for (auto matrix_ : imageSource->matrices) { - draw(matrix_, - *bucket.vertexBuffer, - *bucket.indexBuffer, - bucket.segments, - RasterProgram::TextureBindings{ - textures::image0::Value{ bucket.texture->getResource(), filter }, - textures::image1::Value{ bucket.texture->getResource(), filter }, - }, - bucket.drawScopeID); - } + if (imageData && !imageData->bucket->needsUpload()) { + RasterBucket& bucket = *imageData->bucket; + assert(bucket.texture); + + for (const auto& matrix_ : *imageData->matrices) { + draw(matrix_, + *bucket.vertexBuffer, + *bucket.indexBuffer, + bucket.segments, + RasterProgram::TextureBindings{ + textures::image0::Value{ bucket.texture->getResource(), filter }, + textures::image1::Value{ bucket.texture->getResource(), filter }, + }, + bucket.drawScopeID); } } else { for (const RenderTile& tile : renderTiles) { diff --git a/src/mbgl/renderer/layers/render_raster_layer.hpp b/src/mbgl/renderer/layers/render_raster_layer.hpp index 9d70e9fb4d..9ef7c9837f 100644 --- a/src/mbgl/renderer/layers/render_raster_layer.hpp +++ b/src/mbgl/renderer/layers/render_raster_layer.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include @@ -16,11 +17,12 @@ private: void evaluate(const PropertyEvaluationParameters&) override; bool hasTransition() const override; bool hasCrossfade() const override; - - void render(PaintParameters&, RenderSource*) override; + void prepare(const LayerPrepareParameters&) override; + void render(PaintParameters&) override; // Paint properties style::RasterPaintProperties::Unevaluated unevaluated; + optional imageData; }; } // namespace mbgl diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp index 0aae4e469c..7fc0e08b41 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.cpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp @@ -431,7 +431,7 @@ void RenderSymbolLayer::upload(gfx::UploadPass& uploadPass, UploadParameters& up } } -void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { +void RenderSymbolLayer::render(PaintParameters& parameters) { if (parameters.pass == RenderPass::Opaque) { return; } diff --git a/src/mbgl/renderer/layers/render_symbol_layer.hpp b/src/mbgl/renderer/layers/render_symbol_layer.hpp index 354f433e60..ffd05aa310 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.hpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.hpp @@ -66,7 +66,7 @@ private: bool hasTransition() const override; bool hasCrossfade() const override; void upload(gfx::UploadPass&, UploadParameters&) override; - void render(PaintParameters&, RenderSource*) override; + void render(PaintParameters&) override; void prepare(const LayerPrepareParameters&) override; // Paint properties diff --git a/src/mbgl/renderer/paint_parameters.cpp b/src/mbgl/renderer/paint_parameters.cpp index d8d9cb55dc..2e7cae4d3a 100644 --- a/src/mbgl/renderer/paint_parameters.cpp +++ b/src/mbgl/renderer/paint_parameters.cpp @@ -30,7 +30,7 @@ PaintParameters::PaintParameters(gfx::Context& context_, gfx::RendererBackend& backend_, const UpdateParameters& updateParameters, const EvaluatedLight& evaluatedLight_, - const TransformParameters& transformParams_, + const TransformParameters& transformParams_, RenderStaticData& staticData_, ImageManager& imageManager_, LineAtlas& lineAtlas_) diff --git a/src/mbgl/renderer/render_layer.hpp b/src/mbgl/renderer/render_layer.hpp index 08646a5dff..3208bf1320 100644 --- a/src/mbgl/renderer/render_layer.hpp +++ b/src/mbgl/renderer/render_layer.hpp @@ -78,7 +78,7 @@ public: bool supportsZoom(float zoom) const; virtual void upload(gfx::UploadPass&, UploadParameters&) {} - virtual void render(PaintParameters&, RenderSource*) = 0; + virtual void render(PaintParameters&) = 0; // Check wether the given geometry intersects // with the feature diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index 11135427b7..687370ccba 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -424,7 +424,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { RenderLayer& renderLayer = it->layer; if (renderLayer.hasRenderPass(parameters.pass)) { const auto layerDebugGroup(parameters.encoder->createDebugGroup(renderLayer.getID().c_str())); - renderLayer.render(parameters, it->source); + renderLayer.render(parameters); } } } @@ -458,7 +458,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { RenderLayer& renderLayer = it->layer; if (renderLayer.hasRenderPass(parameters.pass)) { const auto layerDebugGroup(parameters.renderPass->createDebugGroup(renderLayer.getID().c_str())); - renderLayer.render(parameters, it->source); + renderLayer.render(parameters); } } } @@ -475,7 +475,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { RenderLayer& renderLayer = it->layer; if (renderLayer.hasRenderPass(parameters.pass)) { const auto layerDebugGroup(parameters.renderPass->createDebugGroup(renderLayer.getID().c_str())); - renderLayer.render(parameters, it->source); + renderLayer.render(parameters); } } } diff --git a/src/mbgl/renderer/sources/render_image_source.cpp b/src/mbgl/renderer/sources/render_image_source.cpp index 2c6538221f..db5ba75ffc 100644 --- a/src/mbgl/renderer/sources/render_image_source.cpp +++ b/src/mbgl/renderer/sources/render_image_source.cpp @@ -28,12 +28,12 @@ const style::ImageSource::Impl& RenderImageSource::impl() const { } bool RenderImageSource::isLoaded() const { - return !!bucket; + return !!sharedData.bucket; } void RenderImageSource::upload(gfx::UploadPass& uploadPass) { - if (bucket->needsUpload()) { - bucket->upload(uploadPass); + if (sharedData.bucket->needsUpload()) { + sharedData.bucket->upload(uploadPass); } } @@ -42,14 +42,13 @@ void RenderImageSource::prepare(const SourcePrepareParameters& parameters) { return; } - matrices.clear(); + sharedData.matrices = std::make_shared>(tileIds.size(), mat4()); const auto& transformParams = parameters.transform; - for (auto& tileId : tileIds) { - mat4 matrix; + for (size_t i = 0u; i < tileIds.size(); ++i) { + mat4& matrix = (*sharedData.matrices)[i]; matrix::identity(matrix); - transformParams.state.matrixFor(matrix, tileId); + transformParams.state.matrixFor(matrix, tileIds[i]); matrix::multiply(matrix, transformParams.alignedProjMatrix, matrix); - matrices.push_back(matrix); } } @@ -63,7 +62,7 @@ void RenderImageSource::finishRender(PaintParameters& parameters) { auto& programInstance = parameters.programs.debug; - for (auto matrix : matrices) { + for (auto matrix : *sharedData.matrices) { programInstance.draw( parameters.context, *parameters.renderPass, @@ -194,29 +193,29 @@ void RenderImageSource::update(Immutable baseImpl_, auto gc = TileCoordinate::toGeometryCoordinate(tileIds[0], tileCoords); geomCoords.push_back(gc); } - if (!bucket) { - bucket = std::make_unique(image); + if (!sharedData.bucket) { + sharedData.bucket = std::make_unique(image); } else { - bucket->clear(); - if (image != bucket->image) { - bucket->setImage(image); + sharedData.bucket->clear(); + if (image != sharedData.bucket->image) { + sharedData.bucket->setImage(image); } } // Set Bucket Vertices, Indices, and segments - bucket->vertices.emplace_back( + sharedData.bucket->vertices.emplace_back( RasterProgram::layoutVertex({ geomCoords[0].x, geomCoords[0].y }, { 0, 0 })); - bucket->vertices.emplace_back( + sharedData.bucket->vertices.emplace_back( RasterProgram::layoutVertex({ geomCoords[1].x, geomCoords[1].y }, { util::EXTENT, 0 })); - bucket->vertices.emplace_back( + sharedData.bucket->vertices.emplace_back( RasterProgram::layoutVertex({ geomCoords[3].x, geomCoords[3].y }, { 0, util::EXTENT })); - bucket->vertices.emplace_back( + sharedData.bucket->vertices.emplace_back( RasterProgram::layoutVertex({ geomCoords[2].x, geomCoords[2].y }, { util::EXTENT, util::EXTENT })); - bucket->indices.emplace_back(0, 1, 2); - bucket->indices.emplace_back(1, 2, 3); + sharedData.bucket->indices.emplace_back(0, 1, 2); + sharedData.bucket->indices.emplace_back(1, 2, 3); - bucket->segments.emplace_back(0, 0, 4, 6); + sharedData.bucket->segments.emplace_back(0, 0, 4, 6); } void RenderImageSource::dumpDebugLogs() const { diff --git a/src/mbgl/renderer/sources/render_image_source.hpp b/src/mbgl/renderer/sources/render_image_source.hpp index cdc866ea5c..07c3005dbc 100644 --- a/src/mbgl/renderer/sources/render_image_source.hpp +++ b/src/mbgl/renderer/sources/render_image_source.hpp @@ -8,6 +8,12 @@ namespace mbgl { class RasterBucket; +class ImageLayerRenderData { +public: + std::shared_ptr bucket; + std::shared_ptr> matrices; +}; + class RenderImageSource : public RenderSource { public: RenderImageSource(Immutable); @@ -44,12 +50,10 @@ public: private: friend class RenderRasterLayer; - const style::ImageSource::Impl& impl() const; + ImageLayerRenderData sharedData; std::vector tileIds; - std::unique_ptr bucket; - std::vector matrices; }; template <> -- cgit v1.2.1