[core] Introduce mbgl::RendererState

This commit is contained in:
Bruno de Oliveira Abinader
2018-10-17 13:38:11 +02:00
parent b94be6e68f
commit ea51b11dcc
6 changed files with 64 additions and 0 deletions

View File

@@ -180,6 +180,7 @@ include/mbgl/renderer/renderer.hpp
include/mbgl/renderer/renderer_backend.hpp
include/mbgl/renderer/renderer_frontend.hpp
include/mbgl/renderer/renderer_observer.hpp
include/mbgl/renderer/renderer_state.hpp
src/mbgl/renderer/backend_scope.cpp
src/mbgl/renderer/bucket.hpp
src/mbgl/renderer/bucket_parameters.cpp
@@ -216,6 +217,7 @@ src/mbgl/renderer/renderer.cpp
src/mbgl/renderer/renderer_backend.cpp
src/mbgl/renderer/renderer_impl.cpp
src/mbgl/renderer/renderer_impl.hpp
src/mbgl/renderer/renderer_state.cpp
src/mbgl/renderer/style_diff.cpp
src/mbgl/renderer/style_diff.hpp
src/mbgl/renderer/tile_mask.hpp

View File

@@ -0,0 +1,22 @@
#pragma once
#include <mbgl/map/camera.hpp>
#include <mbgl/util/geo.hpp>
namespace mbgl {
class UpdateParameters;
/**
* RendererState acts as a Memento-like object that is able to extract data out of UpdateParameters (an opaque object
* from the public API perspective).
*/
class RendererState {
public:
// Obtains a CameraOptions out of a given UpdateParameters object.
static CameraOptions getCameraOptions(UpdateParameters&, const EdgeInsets& = {});
};
} // namespace mbgl

View File

@@ -1,5 +1,6 @@
#include <mbgl/gl/headless_frontend.hpp>
#include <mbgl/renderer/renderer.hpp>
#include <mbgl/renderer/renderer_state.hpp>
#include <mbgl/renderer/update_parameters.hpp>
#include <mbgl/map/map.hpp>
#include <mbgl/map/transform_state.hpp>

View File

@@ -20,6 +20,7 @@ class UnwrappedTileID;
class TransformState {
friend class Transform;
friend class RendererState;
public:
TransformState(ConstrainMode = ConstrainMode::HeightOnly, ViewportMode = ViewportMode::Default);

View File

@@ -0,0 +1,10 @@
#include <mbgl/renderer/renderer_state.hpp>
#include <mbgl/renderer/update_parameters.hpp>
namespace mbgl {
CameraOptions RendererState::getCameraOptions(UpdateParameters& updateParameters, const EdgeInsets& padding) {
return updateParameters.transformState.getCameraOptions(padding);
}
} // namespace mbgl

View File

@@ -49,6 +49,34 @@ public:
}
};
TEST(Map, RendererState) {
MapTest<> test;
// Map hasn't notified the frontend about an update yet.
CameraOptions nullOptions;
ASSERT_EQ(test.frontend.getCameraOptions(), nullOptions);
LatLng coordinate { 1, 1 };
double zoom = 12.0;
double pitchInDegrees = 45.0;
double bearingInDegrees = 30.0;
test.map.getStyle().loadJSON(util::read_file("test/fixtures/api/empty.json"));
test.map.setLatLngZoom(coordinate, zoom);
test.map.setPitch(pitchInDegrees);
test.map.setBearing(bearingInDegrees);
test.runLoop.runOnce();
test.frontend.render(test.map);
const CameraOptions& options = test.frontend.getCameraOptions();
EXPECT_NEAR(options.center->latitude(), coordinate.latitude(), 1e-7);
EXPECT_NEAR(options.center->longitude(), coordinate.longitude(), 1e-7);
ASSERT_DOUBLE_EQ(*options.zoom, zoom);
ASSERT_DOUBLE_EQ(*options.pitch, pitchInDegrees);
EXPECT_NEAR(*options.angle, bearingInDegrees, 1e-7);
}
TEST(Map, LatLngBehavior) {
MapTest<> test;