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.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/mbgl/renderer/painter_fill.cpp b/src/mbgl/renderer/painter_fill.cpp
index 9976d9f6f0..38aa92fb0e 100644
--- a/src/mbgl/renderer/painter_fill.cpp
+++ b/src/mbgl/renderer/painter_fill.cpp
@@ -65,7 +65,7 @@ void Painter::renderFill(FillBucket& bucket, const FillLayer& layer, const TileI
// Image fill.
if (pass == RenderPass::Translucent && posA && posB) {
- float factor = 8.0 / std::pow(2, state.getIntegerZoom() - id.z) / id.overscaling;
+ float factor = (8.0 / std::pow(2, state.getIntegerZoom() - id.z)) / id.overscaling;
mat3 patternMatrixA;
matrix::identity(patternMatrixA);
@@ -90,6 +90,26 @@ void Painter::renderFill(FillBucket& bucket, const FillLayer& layer, const TileI
patternShader->u_patternmatrix_a = patternMatrixA;
patternShader->u_patternmatrix_b = patternMatrixB;
+ std::array<int, 2> imageSizeScaledA = {{
+ (int)((*posA).size[0] * properties.pattern.value.fromScale),
+ (int)((*posA).size[1] * properties.pattern.value.fromScale)
+ }};
+ std::array<int, 2> imageSizeScaledB = {{
+ (int)((*posB).size[0] * properties.pattern.value.toScale),
+ (int)((*posB).size[1] * properties.pattern.value.toScale)
+ }};
+
+ int tileSize = 512;
+
+ float offsetAx = ((tileSize % imageSizeScaledA[0]) * id.x) / (float)imageSizeScaledA[0];
+ float offsetAy = ((tileSize % imageSizeScaledA[1]) * id.y) / (float)imageSizeScaledA[1];
+
+ float offsetBx = ((tileSize % imageSizeScaledB[0]) * id.x) / (float)imageSizeScaledB[0];
+ float offsetBy = ((tileSize % imageSizeScaledB[1]) * id.y) / (float)imageSizeScaledB[1];
+
+ patternShader->u_offset_a = std::array<float, 2>{{offsetAx, offsetAy}};
+ patternShader->u_offset_b = std::array<float, 2>{{offsetBx, offsetBy}};
+
MBGL_CHECK_ERROR(glActiveTexture(GL_TEXTURE0));
spriteAtlas->bind(true);