fix: reseed particles after zoom out
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
This commit is contained in:
@@ -27,6 +27,7 @@ add_library(
|
||||
${PROJECT_SOURCE_DIR}/test/plugin/plugin.test.cpp
|
||||
${PROJECT_SOURCE_DIR}/test/renderer/image_manager.test.cpp
|
||||
${PROJECT_SOURCE_DIR}/test/renderer/pattern_atlas.test.cpp
|
||||
${PROJECT_SOURCE_DIR}/test/renderer/particle_viewport_reseed.test.cpp
|
||||
${PROJECT_SOURCE_DIR}/test/renderer/retained_underlay_cache.test.cpp
|
||||
${PROJECT_SOURCE_DIR}/test/renderer/shader_registry.test.cpp
|
||||
$<$<BOOL:${MLN_WITH_WEBGPU}>:${PROJECT_SOURCE_DIR}/test/renderer/wgsl_preprocessor.test.cpp>
|
||||
|
||||
81
test/renderer/particle_viewport_reseed.test.cpp
Normal file
81
test/renderer/particle_viewport_reseed.test.cpp
Normal file
@@ -0,0 +1,81 @@
|
||||
#include <mbgl/renderer/particle_viewport_reseed.hpp>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
using namespace mbgl;
|
||||
|
||||
TEST(ParticleViewportReseed, ZoomOutBeyondEpsilonReseedsOnce) {
|
||||
ParticleViewportReseedGesture gesture;
|
||||
gesture.begin(10.0);
|
||||
|
||||
const auto decision = gesture.finish(8.0, true);
|
||||
EXPECT_EQ(decision.action, ParticleViewportReseedAction::Reseed);
|
||||
EXPECT_DOUBLE_EQ(decision.startZoom, 10.0);
|
||||
EXPECT_DOUBLE_EQ(decision.endZoom, 8.0);
|
||||
EXPECT_FALSE(gesture.isActive());
|
||||
EXPECT_EQ(gesture.finish(7.0, true).action, ParticleViewportReseedAction::None);
|
||||
}
|
||||
|
||||
TEST(ParticleViewportReseed, ZoomInDoesNotReseed) {
|
||||
ParticleViewportReseedGesture gesture;
|
||||
gesture.begin(8.0);
|
||||
|
||||
EXPECT_EQ(gesture.finish(10.0, true).action, ParticleViewportReseedAction::None);
|
||||
EXPECT_FALSE(gesture.isActive());
|
||||
}
|
||||
|
||||
TEST(ParticleViewportReseed, PanDoesNotReseed) {
|
||||
ParticleViewportReseedGesture gesture;
|
||||
gesture.begin(8.0);
|
||||
|
||||
EXPECT_EQ(gesture.finish(8.0, true).action, ParticleViewportReseedAction::None);
|
||||
}
|
||||
|
||||
TEST(ParticleViewportReseed, RotateOrPitchWithoutZoomDecreaseDoesNotReseed) {
|
||||
ParticleViewportReseedGesture gesture;
|
||||
gesture.begin(8.0);
|
||||
|
||||
EXPECT_EQ(gesture.finish(8.01, true).action, ParticleViewportReseedAction::None);
|
||||
}
|
||||
|
||||
TEST(ParticleViewportReseed, ZoomJitterWithinEpsilonDoesNotReseed) {
|
||||
ParticleViewportReseedGesture gesture;
|
||||
gesture.begin(8.0);
|
||||
|
||||
EXPECT_EQ(gesture.finish(8.0 - ParticleViewportReseedZoomEpsilon, true).action,
|
||||
ParticleViewportReseedAction::None);
|
||||
}
|
||||
|
||||
TEST(ParticleViewportReseed, InvalidDomainConsumesZoomOutRequest) {
|
||||
ParticleViewportReseedGesture gesture;
|
||||
gesture.begin(10.0);
|
||||
|
||||
const auto decision = gesture.finish(8.0, false);
|
||||
EXPECT_EQ(decision.action, ParticleViewportReseedAction::SkipInvalidDomain);
|
||||
EXPECT_FALSE(gesture.isActive());
|
||||
EXPECT_EQ(gesture.finish(7.0, true).action, ParticleViewportReseedAction::None);
|
||||
}
|
||||
|
||||
TEST(ParticleViewportReseed, ContinuousInvalidationKeepsFirstStartZoom) {
|
||||
ParticleViewportReseedGesture gesture;
|
||||
gesture.begin(10.0);
|
||||
gesture.begin(9.0);
|
||||
gesture.begin(8.0);
|
||||
|
||||
EXPECT_DOUBLE_EQ(gesture.getStartZoom(), 10.0);
|
||||
const auto decision = gesture.finish(7.0, true);
|
||||
EXPECT_DOUBLE_EQ(decision.startZoom, 10.0);
|
||||
EXPECT_EQ(decision.action, ParticleViewportReseedAction::Reseed);
|
||||
}
|
||||
|
||||
TEST(ParticleViewportReseed, NextGestureRefreshesStartZoom) {
|
||||
ParticleViewportReseedGesture gesture;
|
||||
gesture.begin(10.0);
|
||||
EXPECT_EQ(gesture.finish(8.0, true).action, ParticleViewportReseedAction::Reseed);
|
||||
|
||||
gesture.begin(6.0);
|
||||
EXPECT_DOUBLE_EQ(gesture.getStartZoom(), 6.0);
|
||||
const auto decision = gesture.finish(5.0, true);
|
||||
EXPECT_DOUBLE_EQ(decision.startZoom, 6.0);
|
||||
EXPECT_EQ(decision.action, ParticleViewportReseedAction::Reseed);
|
||||
}
|
||||
Reference in New Issue
Block a user