diff options
Diffstat (limited to 'src/mbgl/renderer/layers/render_raster_layer.cpp')
-rw-r--r-- | src/mbgl/renderer/layers/render_raster_layer.cpp | 44 |
1 files changed, 26 insertions, 18 deletions
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 <mbgl/renderer/buckets/raster_bucket.hpp> #include <mbgl/renderer/render_tile.hpp> #include <mbgl/renderer/paint_parameters.hpp> -#include <mbgl/renderer/sources/render_image_source.hpp> #include <mbgl/renderer/render_static_data.hpp> #include <mbgl/programs/programs.hpp> #include <mbgl/programs/raster_program.hpp> @@ -73,7 +72,18 @@ static std::array<float, 3> 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<RenderImageSource>(); + 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<const RasterLayerProperties&>(*evaluatedProperties).evaluated; @@ -132,22 +142,20 @@ void RenderRasterLayer::render(PaintParameters& parameters, RenderSource* source const gfx::TextureFilterType filter = evaluated.get<RasterResampling>() == RasterResamplingType::Nearest ? gfx::TextureFilterType::Nearest : gfx::TextureFilterType::Linear; - if (auto* imageSource = source->as<RenderImageSource>()) { - 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) { |