[Impeller] remove usage of MaxBasisLength in favor of XY variant. (#55670)
MaxBasisXYZ prevents usage of scaling factors less than one since Z is almost always 1.
Fixes https://github.com/flutter/flutter/issues/153451
diff --git a/impeller/entity/geometry/fill_path_geometry.cc b/impeller/entity/geometry/fill_path_geometry.cc
index 209a9d6..7316182 100644
--- a/impeller/entity/geometry/fill_path_geometry.cc
+++ b/impeller/entity/geometry/fill_path_geometry.cc
@@ -37,7 +37,7 @@
}
VertexBuffer vertex_buffer = renderer.GetTessellator()->TessellateConvex(
- path_, host_buffer, entity.GetTransform().GetMaxBasisLength());
+ path_, host_buffer, entity.GetTransform().GetMaxBasisLengthXY());
return GeometryResult{
.type = PrimitiveType::kTriangleStrip,
diff --git a/impeller/entity/geometry/stroke_path_geometry.cc b/impeller/entity/geometry/stroke_path_geometry.cc
index cd188c6..aa06c3a 100644
--- a/impeller/entity/geometry/stroke_path_geometry.cc
+++ b/impeller/entity/geometry/stroke_path_geometry.cc
@@ -581,7 +581,7 @@
Scalar stroke_width = std::max(stroke_width_, min_size);
auto& host_buffer = renderer.GetTransientsBuffer();
- auto scale = entity.GetTransform().GetMaxBasisLength();
+ auto scale = entity.GetTransform().GetMaxBasisLengthXY();
PositionWriter position_writer;
auto polyline = renderer.GetTessellator()->CreateTempPolyline(path_, scale);
diff --git a/impeller/geometry/geometry_unittests.cc b/impeller/geometry/geometry_unittests.cc
index 697471e..cdc4078 100644
--- a/impeller/geometry/geometry_unittests.cc
+++ b/impeller/geometry/geometry_unittests.cc
@@ -330,21 +330,6 @@
}
}
-TEST(GeometryTest, MatrixGetMaxBasisLength) {
- {
- auto m = Matrix::MakeScale({3, 1, 1});
- ASSERT_EQ(m.GetMaxBasisLength(), 3);
-
- m = m * Matrix::MakeSkew(0, 4);
- ASSERT_EQ(m.GetMaxBasisLength(), 5);
- }
-
- {
- auto m = Matrix::MakeScale({-3, 4, 2});
- ASSERT_EQ(m.GetMaxBasisLength(), 4);
- }
-}
-
TEST(GeometryTest, MatrixGetMaxBasisLengthXY) {
{
auto m = Matrix::MakeScale({3, 1, 1});
diff --git a/impeller/geometry/matrix.cc b/impeller/geometry/matrix.cc
index 5f1c367..e47dd86 100644
--- a/impeller/geometry/matrix.cc
+++ b/impeller/geometry/matrix.cc
@@ -193,15 +193,6 @@
return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
}
-Scalar Matrix::GetMaxBasisLength() const {
- Scalar max = 0;
- for (int i = 0; i < 3; i++) {
- max = std::max(max,
- e[i][0] * e[i][0] + e[i][1] * e[i][1] + e[i][2] * e[i][2]);
- }
- return std::sqrt(max);
-}
-
/*
* Adapted for Impeller from Graphics Gems:
* http://www.realtimerendering.com/resources/GraphicsGems/gemsii/unmatrix.c
diff --git a/impeller/geometry/matrix.h b/impeller/geometry/matrix.h
index 3f99607..1726c30 100644
--- a/impeller/geometry/matrix.h
+++ b/impeller/geometry/matrix.h
@@ -295,8 +295,6 @@
Scalar GetDeterminant() const;
- Scalar GetMaxBasisLength() const;
-
constexpr Scalar GetMaxBasisLengthXY() const {
// The full basis computation requires computing the squared scaling factor
// for translate/scale only matrices. This substantially limits the range of