summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/render_tile.cpp
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-07-08 16:23:13 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-07-11 18:39:50 -0700
commitae838b397b6e5ca85d30fe1a8b9ccbb74864a7a6 (patch)
treeb0c98220cab6a8ffed1c44a9f1f7e9ca71261bc6 /src/mbgl/renderer/render_tile.cpp
parenta27b5586e56f8d967a5df4e883225dca0e7ddc3e (diff)
downloadqtlocation-mapboxgl-ae838b397b6e5ca85d30fe1a8b9ccbb74864a7a6.tar.gz
[core] Move translatedMatrix to RenderTile
Diffstat (limited to 'src/mbgl/renderer/render_tile.cpp')
-rw-r--r--src/mbgl/renderer/render_tile.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/mbgl/renderer/render_tile.cpp b/src/mbgl/renderer/render_tile.cpp
index 513515ddf0..5c7c491be0 100644
--- a/src/mbgl/renderer/render_tile.cpp
+++ b/src/mbgl/renderer/render_tile.cpp
@@ -1,5 +1,34 @@
#include <mbgl/renderer/render_tile.hpp>
+#include <mbgl/map/transform_state.hpp>
namespace mbgl {
+using namespace style;
+
+mat4 RenderTile::translatedMatrix(const std::array<float, 2>& translation,
+ TranslateAnchorType anchor,
+ const TransformState& state) const {
+ if (translation[0] == 0 && translation[1] == 0) {
+ return matrix;
+ }
+
+ mat4 vtxMatrix;
+
+ if (anchor == TranslateAnchorType::Viewport) {
+ const double sin_a = std::sin(-state.getAngle());
+ const double cos_a = std::cos(-state.getAngle());
+ matrix::translate(vtxMatrix, matrix,
+ id.pixelsToTileUnits(translation[0] * cos_a - translation[1] * sin_a, state.getZoom()),
+ id.pixelsToTileUnits(translation[0] * sin_a + translation[1] * cos_a, state.getZoom()),
+ 0);
+ } else {
+ matrix::translate(vtxMatrix, matrix,
+ id.pixelsToTileUnits(translation[0], state.getZoom()),
+ id.pixelsToTileUnits(translation[1], state.getZoom()),
+ 0);
+ }
+
+ return vtxMatrix;
+}
+
} // namespace mbgl