diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2014-09-02 11:33:45 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2014-09-03 18:12:40 -0700 |
commit | 4694aa40ada7d33732806f7fbb50b9abb2c412da (patch) | |
tree | 46589b66931f579af36abd9b981e4554b5d65365 /src/renderer/painter_fill.cpp | |
parent | 586cb9144af29e1a384de1c3d5162e916954098e (diff) | |
download | qtlocation-mapboxgl-4694aa40ada7d33732806f7fbb50b9abb2c412da.tar.gz |
Add SpriteAtlas::getPosition()
Diffstat (limited to 'src/renderer/painter_fill.cpp')
-rw-r--r-- | src/renderer/painter_fill.cpp | 26 |
1 files changed, 4 insertions, 22 deletions
diff --git a/src/renderer/painter_fill.cpp b/src/renderer/painter_fill.cpp index 97ca1767f9..45706cca1b 100644 --- a/src/renderer/painter_fill.cpp +++ b/src/renderer/painter_fill.cpp @@ -61,36 +61,18 @@ void Painter::renderFill(FillBucket& bucket, std::shared_ptr<StyleLayer> layer_d Sprite &sprite = *map.getSprite(); if (pass == RenderPass::Translucent && sprite) { SpriteAtlas &spriteAtlas = *map.getSpriteAtlas(); - const Rect<uint16_t> pos = spriteAtlas.getImage(properties.image, sprite); - - // `repeating` indicates that the image will be used in a repeating pattern - // repeating pattern images are assumed to have a 1px padding that mirrors the opposite edge - // positions for repeating images are adjusted to exclude the edge - const int repeating = 1; - const std::array<float, 2> size {{ - float(pos.w) / spriteAtlas.getPixelRatio(), - float(pos.h) / spriteAtlas.getPixelRatio(), - }}; - const std::array<float, 2> tl {{ - (float(pos.x + repeating) / spriteAtlas.getWidth()), - (float(pos.y + repeating) / spriteAtlas.getHeight()), - }}; - const std::array<float, 2> br {{ - (float(pos.x + pos.w - 2 * repeating) / spriteAtlas.getWidth()), - (float(pos.y + pos.h - 2 * repeating) / spriteAtlas.getHeight()), - }}; + const SpriteAtlasPosition pos = spriteAtlas.getPosition(properties.image, sprite, true); const float mix = std::fmod(float(map.getState().getZoom()), 1.0f); - const float factor = 8.0 / std::pow(2, map.getState().getIntegerZoom() - id.z); mat3 patternMatrix; matrix::identity(patternMatrix); - matrix::scale(patternMatrix, patternMatrix, 1.0f / (size[0] * factor), 1.0f / (size[1] * factor)); + matrix::scale(patternMatrix, patternMatrix, 1.0f / (pos.size[0] * factor), 1.0f / (pos.size[1] * factor)); useProgram(patternShader->program); patternShader->setMatrix(vtxMatrix); - patternShader->setPatternTopLeft(tl); - patternShader->setPatternBottomRight(br); + patternShader->setPatternTopLeft(pos.tl); + patternShader->setPatternBottomRight(pos.br); patternShader->setOpacity(properties.opacity); patternShader->setImage(0); patternShader->setMix(mix); |