diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2015-11-13 18:58:12 +0200 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2015-11-18 09:37:27 +0200 |
commit | 711d41f91b41f471c26ff9de6274ab66e0a83176 (patch) | |
tree | f4df23588babcf0b58b2fa1075340747d9a05706 /src | |
parent | 31354186a6326a44442c7e064e376bd7c8bf44ca (diff) | |
download | qtlocation-mapboxgl-711d41f91b41f471c26ff9de6274ab66e0a83176.tar.gz |
[core] Avoid extra copy of TransformState in Painter::render
In MapContext thread, TransformState gets updated from main thread to
MapContext and Painter can safely reference MapContext's TransformState
instead of copying it upon each Painter::render call.
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/map/map_context.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/map/map_context.hpp | 5 | ||||
-rw-r--r-- | src/mbgl/map/transform.cpp | 12 | ||||
-rw-r--r-- | src/mbgl/map/transform.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/map/transform_state.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/map/transform_state.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/painter.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/renderer/painter.hpp | 6 |
8 files changed, 20 insertions, 21 deletions
diff --git a/src/mbgl/map/map_context.cpp b/src/mbgl/map/map_context.cpp index aa8aecd09b..6fbd35ad78 100644 --- a/src/mbgl/map/map_context.cpp +++ b/src/mbgl/map/map_context.cpp @@ -242,8 +242,8 @@ bool MapContext::renderSync(const TransformState& state, const FrameData& frame) // Cleanup OpenGL objects that we abandoned since the last render call. glObjectStore.performCleanup(); - if (!painter) painter = std::make_unique<Painter>(data); - painter->render(*style, transformState, frame); + if (!painter) painter = std::make_unique<Painter>(data, transformState); + painter->render(*style, frame); if (data.mode == MapMode::Still) { callback(nullptr, view.readStillImage()); diff --git a/src/mbgl/map/map_context.hpp b/src/mbgl/map/map_context.hpp index 433d5ecea5..f4df3aae25 100644 --- a/src/mbgl/map/map_context.hpp +++ b/src/mbgl/map/map_context.hpp @@ -21,13 +21,8 @@ class View; class MapData; class TexturePool; class Painter; -class Sprite; -class Worker; -class StillImage; class SpriteImage; class FileRequest; -struct LatLng; -struct LatLngBounds; struct FrameData { std::array<uint16_t, 2> framebufferSize; diff --git a/src/mbgl/map/transform.cpp b/src/mbgl/map/transform.cpp index 3c451d00eb..91fe87791e 100644 --- a/src/mbgl/map/transform.cpp +++ b/src/mbgl/map/transform.cpp @@ -159,7 +159,7 @@ void Transform::setLatLngZoom(const LatLng& latLng, double zoom, const Duration& #pragma mark - Zoom -void Transform::scaleBy(const double ds, const PrecisionPoint& center, const Duration& duration) { +void Transform::scaleBy(double ds, const PrecisionPoint& center, const Duration& duration) { if (std::isnan(ds) || !center) { return; } @@ -175,7 +175,7 @@ void Transform::scaleBy(const double ds, const PrecisionPoint& center, const Dur _setScale(new_scale, center, duration); } -void Transform::setScale(const double scale, const PrecisionPoint& center, const Duration& duration) { +void Transform::setScale(double scale, const PrecisionPoint& center, const Duration& duration) { if (std::isnan(scale) || !center) { return; } @@ -183,7 +183,7 @@ void Transform::setScale(const double scale, const PrecisionPoint& center, const _setScale(scale, center, duration); } -void Transform::setZoom(const double zoom, const Duration& duration) { +void Transform::setZoom(double zoom, const Duration& duration) { if (std::isnan(zoom)) { return; } @@ -225,7 +225,7 @@ void Transform::_setScale(double new_scale, const PrecisionPoint& center, const _setScaleXY(new_scale, xn, yn, duration); } -void Transform::_setScaleXY(const double new_scale, const double xn, const double yn, +void Transform::_setScaleXY(double new_scale, double xn, double yn, const Duration& duration) { CameraOptions options; options.duration = duration; @@ -332,7 +332,7 @@ void Transform::rotateBy(const PrecisionPoint& first, const PrecisionPoint& seco _setAngle(ang, duration); } -void Transform::setAngle(const double new_angle, const Duration& duration) { +void Transform::setAngle(double new_angle, const Duration& duration) { if (std::isnan(new_angle)) { return; } @@ -340,7 +340,7 @@ void Transform::setAngle(const double new_angle, const Duration& duration) { _setAngle(new_angle, duration); } -void Transform::setAngle(const double new_angle, const PrecisionPoint& center) { +void Transform::setAngle(double new_angle, const PrecisionPoint& center) { if (std::isnan(new_angle) || !center) { return; } diff --git a/src/mbgl/map/transform.hpp b/src/mbgl/map/transform.hpp index ec057dedda..0fc900dac7 100644 --- a/src/mbgl/map/transform.hpp +++ b/src/mbgl/map/transform.hpp @@ -60,7 +60,7 @@ public: bool isGestureInProgress() const { return state.isGestureInProgress(); } // Transform state - const TransformState getState() const { return state; } + TransformState getState() const { return state; } bool isRotating() const { return state.isRotating(); } bool isScaling() const { return state.isScaling(); } bool isPanning() const { return state.isPanning(); } diff --git a/src/mbgl/map/transform_state.cpp b/src/mbgl/map/transform_state.cpp index cb094577a3..f58bfde8df 100644 --- a/src/mbgl/map/transform_state.cpp +++ b/src/mbgl/map/transform_state.cpp @@ -7,6 +7,10 @@ using namespace mbgl; +TransformState::TransformState() +{ +} + #pragma mark - Matrix void TransformState::matrixFor(mat4& matrix, const TileID& id, const int8_t z) const { diff --git a/src/mbgl/map/transform_state.hpp b/src/mbgl/map/transform_state.hpp index b99595564f..0373798f00 100644 --- a/src/mbgl/map/transform_state.hpp +++ b/src/mbgl/map/transform_state.hpp @@ -21,6 +21,8 @@ class TransformState { friend class Transform; public: + TransformState(); + // Matrix void matrixFor(mat4& matrix, const TileID& id, const int8_t z) const; void getProjMatrix(mat4& matrix) const; diff --git a/src/mbgl/renderer/painter.cpp b/src/mbgl/renderer/painter.cpp index 284bed3705..a3902fece0 100644 --- a/src/mbgl/renderer/painter.cpp +++ b/src/mbgl/renderer/painter.cpp @@ -43,7 +43,8 @@ using namespace mbgl; -Painter::Painter(MapData& data_) : data(data_) { +Painter::Painter(MapData& data_, TransformState& state_) + : data(data_), state(state_) { setup(); } @@ -127,8 +128,7 @@ void Painter::prepareTile(const Tile& tile) { config.stencilFunc = { GL_EQUAL, ref, mask }; } -void Painter::render(const Style& style, TransformState state_, const FrameData& frame_) { - state = state_; +void Painter::render(const Style& style, const FrameData& frame_) { frame = frame_; glyphAtlas = style.glyphAtlas.get(); diff --git a/src/mbgl/renderer/painter.hpp b/src/mbgl/renderer/painter.hpp index 8f63388461..5de1031d23 100644 --- a/src/mbgl/renderer/painter.hpp +++ b/src/mbgl/renderer/painter.hpp @@ -82,7 +82,7 @@ struct RenderItem { class Painter : private util::noncopyable { public: - Painter(MapData& data); + Painter(MapData&, TransformState&); ~Painter(); // Renders the backdrop of the OpenGL view. This also paints in areas where we don't have any @@ -93,7 +93,6 @@ public: void changeMatrix(); void render(const Style& style, - TransformState state, const FrameData& frame); // Renders debug information for a tile. @@ -182,8 +181,7 @@ public: private: MapData& data; - - TransformState state; + TransformState& state; FrameData frame; int indent = 0; |