未验证 提交 dc7b5eb8 编写于 作者: G Gary Qian 提交者: GitHub

Use Skia normalize again after Skia precision fix. (#6121)

* Fix tilt by using custom normalize impl to avoid strange skia normalize behavior

* Use Skia normalize again after Skia fix.
上级 1c768241
...@@ -28,14 +28,6 @@ static inline SkVector3 SkVector3Cross(const SkVector3& a, const SkVector3& b) { ...@@ -28,14 +28,6 @@ static inline SkVector3 SkVector3Cross(const SkVector3& a, const SkVector3& b) {
MatrixDecomposition::MatrixDecomposition(const SkMatrix& matrix) MatrixDecomposition::MatrixDecomposition(const SkMatrix& matrix)
: MatrixDecomposition(SkMatrix44{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) { MatrixDecomposition::MatrixDecomposition(SkMatrix44 matrix) : valid_(false) {
if (matrix.get(3, 3) == 0) { if (matrix.get(3, 3) == 0) {
return; return;
...@@ -91,14 +83,14 @@ MatrixDecomposition::MatrixDecomposition(SkMatrix44 matrix) : valid_(false) { ...@@ -91,14 +83,14 @@ MatrixDecomposition::MatrixDecomposition(SkMatrix44 matrix) : valid_(false) {
scale_.fX = row[0].length(); scale_.fX = row[0].length();
SkVector3Normalize(row[0]); row[0].normalize();
shear_.fX = row[0].dot(row[1]); shear_.fX = row[0].dot(row[1]);
row[1] = SkVector3Combine(row[1], 1.0, row[0], -shear_.fX); row[1] = SkVector3Combine(row[1], 1.0, row[0], -shear_.fX);
scale_.fY = row[1].length(); scale_.fY = row[1].length();
SkVector3Normalize(row[1]); row[1].normalize();
shear_.fX /= scale_.fY; shear_.fX /= scale_.fY;
...@@ -109,7 +101,7 @@ MatrixDecomposition::MatrixDecomposition(SkMatrix44 matrix) : valid_(false) { ...@@ -109,7 +101,7 @@ MatrixDecomposition::MatrixDecomposition(SkMatrix44 matrix) : valid_(false) {
scale_.fZ = row[2].length(); scale_.fZ = row[2].length();
SkVector3Normalize(row[2]); row[2].normalize();
shear_.fY /= scale_.fZ; shear_.fY /= scale_.fZ;
shear_.fZ /= scale_.fZ; shear_.fZ /= scale_.fZ;
......
...@@ -95,7 +95,8 @@ TEST(MatrixDecomposition, Combination) { ...@@ -95,7 +95,8 @@ TEST(MatrixDecomposition, Combination) {
} }
TEST(MatrixDecomposition, ScaleFloatError) { 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(); SkMatrix44 matrix = SkMatrix44::I();
matrix.setScale(scale, scale, 1.0f); matrix.setScale(scale, scale, 1.0f);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册