summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/sources/render_image_source.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/sources/render_image_source.cpp')
-rw-r--r--src/mbgl/renderer/sources/render_image_source.cpp79
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&,