diff options
Diffstat (limited to 'src/mbgl/renderer/sources/render_image_source.cpp')
-rw-r--r-- | src/mbgl/renderer/sources/render_image_source.cpp | 79 |
1 files changed, 43 insertions, 36 deletions
diff --git a/src/mbgl/renderer/sources/render_image_source.cpp b/src/mbgl/renderer/sources/render_image_source.cpp index 04edced011..7e793c6a4a 100644 --- a/src/mbgl/renderer/sources/render_image_source.cpp +++ b/src/mbgl/renderer/sources/render_image_source.cpp @@ -17,55 +17,25 @@ namespace mbgl { using namespace style; -RenderImageSource::RenderImageSource(Immutable<style::ImageSource::Impl> impl_) - : RenderSource(impl_) { -} - -RenderImageSource::~RenderImageSource() = default; - -const style::ImageSource::Impl& RenderImageSource::impl() const { - return static_cast<const style::ImageSource::Impl&>(*baseImpl); -} +ImageSourceRenderData::~ImageSourceRenderData() = default; -bool RenderImageSource::isLoaded() const { - return !!bucket; -} - -void RenderImageSource::upload(gfx::UploadPass& uploadPass) { - if (bucket->needsUpload()) { +void ImageSourceRenderData::upload(gfx::UploadPass& uploadPass) const { + if (bucket && bucket->needsUpload()) { bucket->upload(uploadPass); } } -void RenderImageSource::prepare(const SourcePrepareParameters& parameters) { - if (!isLoaded()) { - return; - } - - std::vector<mat4> matrices{tileIds.size(), mat4()}; - const auto& transformParams = parameters.transform; - for (size_t i = 0u; i < tileIds.size(); ++i) { - mat4& matrix = matrices[i]; - matrix::identity(matrix); - transformParams.state.matrixFor(matrix, tileIds[i]); - matrix::multiply(matrix, transformParams.alignedProjMatrix, matrix); - } - - renderData = std::make_unique<ImageSourceRenderData>(bucket, std::move(matrices)); -} - -void RenderImageSource::finishRender(PaintParameters& parameters) { - if (!isLoaded() || !(parameters.debugOptions & MapDebugOptions::TileBorders)) { +void ImageSourceRenderData::render(PaintParameters& parameters) const { + if (!bucket || !(parameters.debugOptions & MapDebugOptions::TileBorders)) { return; } - assert(renderData); static const style::Properties<>::PossiblyEvaluated properties {}; static const DebugProgram::Binders paintAttributeData(properties, 0); auto& programInstance = parameters.programs.debug; - for (auto matrix : renderData->matrices) { + for (auto matrix : matrices) { programInstance.draw( parameters.context, *parameters.renderPass, @@ -96,6 +66,43 @@ void RenderImageSource::finishRender(PaintParameters& parameters) { } } +RenderImageSource::RenderImageSource(Immutable<style::ImageSource::Impl> impl_) + : RenderSource(std::move(impl_)) { +} + +RenderImageSource::~RenderImageSource() = default; + +const style::ImageSource::Impl& RenderImageSource::impl() const { + return static_cast<const style::ImageSource::Impl&>(*baseImpl); +} + +bool RenderImageSource::isLoaded() const { + return !!bucket; +} + +std::unique_ptr<RenderItem> RenderImageSource::createRenderItem() { + assert(renderData); + return std::move(renderData); +} + +void RenderImageSource::prepare(const SourcePrepareParameters& parameters) { + assert(!renderData); + if (!isLoaded()) { + renderData = std::make_unique<ImageSourceRenderData>(bucket, std::vector<mat4>{}, baseImpl->id); + return; + } + + std::vector<mat4> matrices{tileIds.size(), mat4()}; + const auto& transformParams = parameters.transform; + for (size_t i = 0u; i < tileIds.size(); ++i) { + mat4& matrix = matrices[i]; + matrix::identity(matrix); + transformParams.state.matrixFor(matrix, tileIds[i]); + matrix::multiply(matrix, transformParams.alignedProjMatrix, matrix); + } + renderData = std::make_unique<ImageSourceRenderData>(bucket, std::move(matrices), baseImpl->id); +} + std::unordered_map<std::string, std::vector<Feature>> RenderImageSource::queryRenderedFeatures(const ScreenLineString&, const TransformState&, |