From da3b7749b05af842797e83d3b3815ae3d8ab79bf Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Wed, 3 Jul 2019 15:55:47 +0300 Subject: [core] RenderSource creates render items --- src/mbgl/renderer/sources/render_image_source.cpp | 79 ++++++++++++----------- 1 file changed, 43 insertions(+), 36 deletions(-) (limited to 'src/mbgl/renderer/sources/render_image_source.cpp') 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 impl_) - : RenderSource(impl_) { -} - -RenderImageSource::~RenderImageSource() = default; - -const style::ImageSource::Impl& RenderImageSource::impl() const { - return static_cast(*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 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(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 impl_) + : RenderSource(std::move(impl_)) { +} + +RenderImageSource::~RenderImageSource() = default; + +const style::ImageSource::Impl& RenderImageSource::impl() const { + return static_cast(*baseImpl); +} + +bool RenderImageSource::isLoaded() const { + return !!bucket; +} + +std::unique_ptr RenderImageSource::createRenderItem() { + assert(renderData); + return std::move(renderData); +} + +void RenderImageSource::prepare(const SourcePrepareParameters& parameters) { + assert(!renderData); + if (!isLoaded()) { + renderData = std::make_unique(bucket, std::vector{}, baseImpl->id); + return; + } + + std::vector 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(bucket, std::move(matrices), baseImpl->id); +} + std::unordered_map> RenderImageSource::queryRenderedFeatures(const ScreenLineString&, const TransformState&, -- cgit v1.2.1