summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/layers/render_background_layer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/layers/render_background_layer.cpp')
-rw-r--r--src/mbgl/renderer/layers/render_background_layer.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/mbgl/renderer/layers/render_background_layer.cpp b/src/mbgl/renderer/layers/render_background_layer.cpp
index 3eb9bc2a30..51c4f2ae4f 100644
--- a/src/mbgl/renderer/layers/render_background_layer.cpp
+++ b/src/mbgl/renderer/layers/render_background_layer.cpp
@@ -1,6 +1,7 @@
#include <mbgl/renderer/layers/render_background_layer.hpp>
#include <mbgl/style/layers/background_layer_impl.hpp>
#include <mbgl/renderer/bucket.hpp>
+#include <mbgl/renderer/upload_parameters.hpp>
#include <mbgl/renderer/paint_parameters.hpp>
#include <mbgl/renderer/image_manager.hpp>
#include <mbgl/renderer/render_static_data.hpp>
@@ -37,6 +38,9 @@ void RenderBackgroundLayer::evaluate(const PropertyEvaluationParameters &paramet
passes = properties->evaluated.get<style::BackgroundOpacity>() > 0 ? RenderPass::Translucent
: RenderPass::None;
+ if (passes != RenderPass::None && !properties->evaluated.get<style::BackgroundPattern>().to.empty()) {
+ passes |= RenderPass::Upload;
+ }
evaluatedProperties = std::move(properties);
}
@@ -48,6 +52,15 @@ bool RenderBackgroundLayer::hasCrossfade() const {
return getCrossfade<BackgroundLayerProperties>(evaluatedProperties).t != 1;
}
+void RenderBackgroundLayer::upload(gfx::UploadPass&, UploadParameters& parameters) {
+ const auto& evaluated = static_cast<const BackgroundLayerProperties&>(*evaluatedProperties).evaluated;
+ if (!evaluated.get<BackgroundPattern>().to.empty()) {
+ // Ensures that the texture gets added and uploaded to the atlas.
+ parameters.imageManager.getPattern(evaluated.get<BackgroundPattern>().from);
+ parameters.imageManager.getPattern(evaluated.get<BackgroundPattern>().to);
+ }
+}
+
void RenderBackgroundLayer::render(PaintParameters& parameters, RenderSource*) {
// Note that for bottommost layers without a pattern, the background color is drawn with
// glClear rather than this method.
@@ -63,7 +76,7 @@ void RenderBackgroundLayer::render(PaintParameters& parameters, RenderSource*) {
parameters.state.getZoom()
);
const auto allAttributeBindings = program.computeAllAttributeBindings(
- parameters.staticData.tileVertexBuffer,
+ *parameters.staticData.tileVertexBuffer,
paintAttributeData,
properties
);
@@ -78,7 +91,7 @@ void RenderBackgroundLayer::render(PaintParameters& parameters, RenderSource*) {
gfx::StencilMode::disabled(),
parameters.colorModeForRenderPass(),
gfx::CullFaceMode::disabled(),
- parameters.staticData.quadTriangleIndexBuffer,
+ *parameters.staticData.quadTriangleIndexBuffer,
parameters.staticData.tileTriangleSegments,
allUniformValues,
allAttributeBindings,
@@ -109,7 +122,7 @@ void RenderBackgroundLayer::render(PaintParameters& parameters, RenderSource*) {
parameters.state
),
BackgroundPatternProgram::TextureBindings{
- textures::image::Value{ parameters.imageManager.textureBinding(parameters.context) },
+ textures::image::Value{ parameters.imageManager.textureBinding() },
}
);
}