diff options
author | Ansis Brammanis <brammanis@gmail.com> | 2015-02-02 16:23:10 -0800 |
---|---|---|
committer | Ansis Brammanis <brammanis@gmail.com> | 2015-02-02 16:23:10 -0800 |
commit | b3ca6fcca6e3a1c383a0235aea3110bc940c0656 (patch) | |
tree | 2cbc938d3fc626a5c4e3fb3950d619c52bf04f82 /src | |
parent | d532824aec25e20efccb80860b990db0b85780ac (diff) | |
download | qtlocation-mapboxgl-b3ca6fcca6e3a1c383a0235aea3110bc940c0656.tar.gz |
implement functions for background-image
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/renderer/painter.cpp | 50 | ||||
-rw-r--r-- | src/mbgl/style/style_parser.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/style/style_properties.hpp | 2 |
3 files changed, 36 insertions, 18 deletions
diff --git a/src/mbgl/renderer/painter.cpp b/src/mbgl/renderer/painter.cpp index 448b380743..f8347123c0 100644 --- a/src/mbgl/renderer/painter.cpp +++ b/src/mbgl/renderer/painter.cpp @@ -376,39 +376,57 @@ void Painter::renderTileLayer(const Tile& tile, util::ptr<StyleLayer> layer_desc void Painter::renderBackground(util::ptr<StyleLayer> layer_desc) { const BackgroundProperties& properties = layer_desc->getProperties<BackgroundProperties>(); - if (properties.image.size()) { + if (properties.image.low.size()) { if ((properties.opacity >= 1.0f) != (pass == RenderPass::Opaque)) return; - SpriteAtlasPosition imagePos = spriteAtlas.getPosition(properties.image, true); + SpriteAtlasPosition imagePosA = spriteAtlas.getPosition(properties.image.low, true); + SpriteAtlasPosition imagePosB = spriteAtlas.getPosition(properties.image.high, true); float zoomFraction = state.getZoomFraction(); useProgram(patternShader->program); patternShader->u_matrix = identityMatrix; - patternShader->u_pattern_tl_a = imagePos.tl; - patternShader->u_pattern_br_a = imagePos.br; + patternShader->u_pattern_tl_a = imagePosA.tl; + patternShader->u_pattern_br_a = imagePosA.br; + patternShader->u_pattern_tl_b = imagePosB.tl; + patternShader->u_pattern_br_b = imagePosB.br; patternShader->u_mix = zoomFraction; patternShader->u_opacity = properties.opacity; - std::array<float, 2> size = imagePos.size; double lon, lat; state.getLonLat(lon, lat); std::array<float, 2> center = state.locationCoordinate(lon, lat); float scale = 1 / std::pow(2, zoomFraction); - mat3 matrix; - matrix::identity(matrix); - matrix::scale(matrix, matrix, - 1.0f / size[0], - 1.0f / size[1]); - matrix::translate(matrix, matrix, - std::fmod(center[0] * 512, size[0]), - std::fmod(center[1] * 512, size[1])); - matrix::rotate(matrix, matrix, -state.getAngle()); - matrix::scale(matrix, matrix, + std::array<float, 2> sizeA = imagePosA.size; + mat3 matrixA; + matrix::identity(matrixA); + matrix::scale(matrixA, matrixA, + 1.0f / (sizeA[0] * properties.image.lowScale), + 1.0f / (sizeA[1] * properties.image.lowScale)); + matrix::translate(matrixA, matrixA, + std::fmod(center[0] * 512, sizeA[0] * properties.image.lowScale), + std::fmod(center[1] * 512, sizeA[1] * properties.image.lowScale)); + matrix::rotate(matrixA, matrixA, -state.getAngle()); + matrix::scale(matrixA, matrixA, scale * state.getWidth() / 2, -scale * state.getHeight() / 2); - patternShader->u_patternmatrix_a = matrix; + + std::array<float, 2> sizeB = imagePosB.size; + mat3 matrixB; + matrix::identity(matrixB); + matrix::scale(matrixB, matrixB, + 1.0f / (sizeB[0] * properties.image.highScale), + 1.0f / (sizeB[1] * properties.image.highScale)); + matrix::translate(matrixB, matrixB, + std::fmod(center[0] * 512, sizeB[0] * properties.image.highScale), + std::fmod(center[1] * 512, sizeB[1] * properties.image.highScale)); + matrix::rotate(matrixB, matrixB, -state.getAngle()); + matrix::scale(matrixB, matrixB, + scale * state.getWidth() / 2, + -scale * state.getHeight() / 2); + + patternShader->u_patternmatrix_a = matrixA; backgroundBuffer.bind(); patternShader->bind(0); diff --git a/src/mbgl/style/style_parser.cpp b/src/mbgl/style/style_parser.cpp index 3f1fc64dab..1cf8d2e355 100644 --- a/src/mbgl/style/style_parser.cpp +++ b/src/mbgl/style/style_parser.cpp @@ -703,7 +703,7 @@ void StyleParser::parsePaint(JSVal value, ClassProperties &klass) { parseOptionalProperty<Function<float>>("background-opacity", Key::BackgroundOpacity, klass, value); parseOptionalProperty<Function<Color>>("background-color", Key::BackgroundColor, klass, value); - parseOptionalProperty<std::string>("background-image", Key::BackgroundImage, klass, value); + parseOptionalProperty<FadedStopsFunction<Faded<std::string>>>("background-image", Key::BackgroundImage, klass, value); } void StyleParser::parseReference(JSVal value, util::ptr<StyleLayer> &layer) { diff --git a/src/mbgl/style/style_properties.hpp b/src/mbgl/style/style_properties.hpp index db9e4c34c9..d2c134e8d8 100644 --- a/src/mbgl/style/style_properties.hpp +++ b/src/mbgl/style/style_properties.hpp @@ -96,7 +96,7 @@ struct BackgroundProperties { inline BackgroundProperties() {} float opacity = 1.0f; Color color = {{ 0, 0, 0, 1 }}; - std::string image; + Faded<std::string> image; }; typedef mapbox::util::variant< |