summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/painter_fill.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/painter_fill.cpp')
-rw-r--r--src/mbgl/renderer/painter_fill.cpp24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/mbgl/renderer/painter_fill.cpp b/src/mbgl/renderer/painter_fill.cpp
index 4bee5b6d1e..beebdfcf83 100644
--- a/src/mbgl/renderer/painter_fill.cpp
+++ b/src/mbgl/renderer/painter_fill.cpp
@@ -59,30 +59,30 @@ void Painter::renderFill(FillBucket& bucket, const FillLayer& layer, const TileI
}
if (pattern) {
- // Image fill.
- if (pass == RenderPass::Translucent) {
+ mapbox::util::optional<SpriteAtlasPosition> posA = spriteAtlas->getPosition(properties.pattern.value.from, true);
+ mapbox::util::optional<SpriteAtlasPosition> posB = spriteAtlas->getPosition(properties.pattern.value.to, true);
- const SpriteAtlasPosition posA = spriteAtlas->getPosition(properties.pattern.value.from, true);
- const SpriteAtlasPosition posB = spriteAtlas->getPosition(properties.pattern.value.to, true);
+ // Image fill.
+ if (pass == RenderPass::Translucent && posA && posB) {
float factor = 8.0 / std::pow(2, state.getIntegerZoom() - id.z) / id.overscaling;
mat3 patternMatrixA;
matrix::identity(patternMatrixA);
matrix::scale(patternMatrixA, patternMatrixA,
- 1.0f / (posA.size[0] * factor * properties.pattern.value.fromScale),
- 1.0f / (posA.size[1] * factor * properties.pattern.value.fromScale));
+ 1.0f / ((*posA).size[0] * factor * properties.pattern.value.fromScale),
+ 1.0f / ((*posA).size[1] * factor * properties.pattern.value.fromScale));
mat3 patternMatrixB;
matrix::identity(patternMatrixB);
matrix::scale(patternMatrixB, patternMatrixB,
- 1.0f / (posB.size[0] * factor * properties.pattern.value.toScale),
- 1.0f / (posB.size[1] * factor * properties.pattern.value.toScale));
+ 1.0f / ((*posB).size[0] * factor * properties.pattern.value.toScale),
+ 1.0f / ((*posB).size[1] * factor * properties.pattern.value.toScale));
config.program = patternShader->program;
patternShader->u_matrix = vtxMatrix;
- patternShader->u_pattern_tl_a = posA.tl;
- patternShader->u_pattern_br_a = posA.br;
- patternShader->u_pattern_tl_b = posB.tl;
- patternShader->u_pattern_br_b = posB.br;
+ patternShader->u_pattern_tl_a = (*posA).tl;
+ patternShader->u_pattern_br_a = (*posA).br;
+ patternShader->u_pattern_tl_b = (*posB).tl;
+ patternShader->u_pattern_br_b = (*posB).br;
patternShader->u_opacity = properties.opacity;
patternShader->u_image = 0;
patternShader->u_mix = properties.pattern.value.t;