Skip to content

Commit

Permalink
Use Skia normalize again after Skia precision fix. (flutter#6121)
Browse files Browse the repository at this point in the history
* Fix tilt by using custom normalize impl to avoid strange skia normalize behavior

* Use Skia normalize again after Skia fix.
  • Loading branch information
GaryQian authored Aug 30, 2018
1 parent 1c76824 commit dc7b5eb
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 12 deletions.
14 changes: 3 additions & 11 deletions flow/matrix_decomposition.cc
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,6 @@ static inline SkVector3 SkVector3Cross(const SkVector3& a, const SkVector3& b) {
MatrixDecomposition::MatrixDecomposition(const SkMatrix& matrix)
: MatrixDecomposition(SkMatrix44{matrix}) {}

// TODO(garyq): use skia row[x].normalize() when skia fixes it
static inline void SkVector3Normalize(SkVector3& v) {
float mag = sqrt(v.fX * v.fX + v.fY * v.fY + v.fZ * v.fZ);
v.fX /= mag;
v.fY /= mag;
v.fZ /= mag;
}

MatrixDecomposition::MatrixDecomposition(SkMatrix44 matrix) : valid_(false) {
if (matrix.get(3, 3) == 0) {
return;
Expand Down Expand Up @@ -91,14 +83,14 @@ MatrixDecomposition::MatrixDecomposition(SkMatrix44 matrix) : valid_(false) {

scale_.fX = row[0].length();

SkVector3Normalize(row[0]);
row[0].normalize();

shear_.fX = row[0].dot(row[1]);
row[1] = SkVector3Combine(row[1], 1.0, row[0], -shear_.fX);

scale_.fY = row[1].length();

SkVector3Normalize(row[1]);
row[1].normalize();

shear_.fX /= scale_.fY;

Expand All @@ -109,7 +101,7 @@ MatrixDecomposition::MatrixDecomposition(SkMatrix44 matrix) : valid_(false) {

scale_.fZ = row[2].length();

SkVector3Normalize(row[2]);
row[2].normalize();

shear_.fY /= scale_.fZ;
shear_.fZ /= scale_.fZ;
Expand Down
3 changes: 2 additions & 1 deletion flow/matrix_decomposition_unittests.cc
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,8 @@ TEST(MatrixDecomposition, Combination) {
}

TEST(MatrixDecomposition, ScaleFloatError) {
for (float scale = 0.0001f; scale < 2.0f; scale += 0.000001f) {
// Strange behavior under 0.000245 due to underflow issues.
for (float scale = 0.000245f; scale < 2.0f; scale += 0.000001f) {
SkMatrix44 matrix = SkMatrix44::I();
matrix.setScale(scale, scale, 1.0f);

Expand Down

0 comments on commit dc7b5eb

Please sign in to comment.