OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkMatrix44.h" | 8 #include "SkMatrix44.h" |
9 | 9 |
10 static inline bool eq4(const SkMScalar* SK_RESTRICT a, | 10 static inline bool eq4(const SkMScalar* SK_RESTRICT a, |
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
466 if (this->isScaleTranslate()) { | 466 if (this->isScaleTranslate()) { |
467 if (0 == fMat[0][0] * fMat[1][1] * fMat[2][2]) { | 467 if (0 == fMat[0][0] * fMat[1][1] * fMat[2][2]) { |
468 return false; | 468 return false; |
469 } | 469 } |
470 | 470 |
471 if (inverse) { | 471 if (inverse) { |
472 double invXScale = 1 / fMat[0][0]; | 472 double invXScale = 1 / fMat[0][0]; |
473 double invYScale = 1 / fMat[1][1]; | 473 double invYScale = 1 / fMat[1][1]; |
474 double invZScale = 1 / fMat[2][2]; | 474 double invZScale = 1 / fMat[2][2]; |
475 | 475 |
476 inverse->fMat[0][0] = invXScale; | 476 inverse->fMat[0][0] = SkDoubleToMScalar(invXScale); |
477 inverse->fMat[0][1] = 0; | 477 inverse->fMat[0][1] = 0; |
478 inverse->fMat[0][2] = 0; | 478 inverse->fMat[0][2] = 0; |
479 inverse->fMat[0][3] = 0; | 479 inverse->fMat[0][3] = 0; |
480 | 480 |
481 inverse->fMat[1][0] = 0; | 481 inverse->fMat[1][0] = 0; |
482 inverse->fMat[1][1] = invYScale; | 482 inverse->fMat[1][1] = SkDoubleToMScalar(invYScale); |
483 inverse->fMat[1][2] = 0; | 483 inverse->fMat[1][2] = 0; |
484 inverse->fMat[1][3] = 0; | 484 inverse->fMat[1][3] = 0; |
485 | 485 |
486 inverse->fMat[2][0] = 0; | 486 inverse->fMat[2][0] = 0; |
487 inverse->fMat[2][1] = 0; | 487 inverse->fMat[2][1] = 0; |
488 inverse->fMat[2][2] = invZScale; | 488 inverse->fMat[2][2] = SkDoubleToMScalar(invZScale); |
489 inverse->fMat[2][3] = 0; | 489 inverse->fMat[2][3] = 0; |
490 | 490 |
491 inverse->fMat[3][0] = -fMat[3][0] * invXScale; | 491 inverse->fMat[3][0] = SkDoubleToMScalar(-fMat[3][0] * invXScale); |
492 inverse->fMat[3][1] = -fMat[3][1] * invYScale; | 492 inverse->fMat[3][1] = SkDoubleToMScalar(-fMat[3][1] * invYScale); |
493 inverse->fMat[3][2] = -fMat[3][2] * invZScale; | 493 inverse->fMat[3][2] = SkDoubleToMScalar(-fMat[3][2] * invZScale); |
494 inverse->fMat[3][3] = 1; | 494 inverse->fMat[3][3] = 1; |
495 | 495 |
496 inverse->setTypeMask(this->getType()); | 496 inverse->setTypeMask(this->getType()); |
497 } | 497 } |
498 | 498 |
499 return true; | 499 return true; |
500 } | 500 } |
501 | 501 |
502 double a00 = fMat[0][0]; | 502 double a00 = fMat[0][0]; |
503 double a01 = fMat[0][1]; | 503 double a01 = fMat[0][1]; |
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
963 dst[SkMatrix::kMSkewY] = SkMScalarToScalar(fMat[0][1]); | 963 dst[SkMatrix::kMSkewY] = SkMScalarToScalar(fMat[0][1]); |
964 dst[SkMatrix::kMScaleY] = SkMScalarToScalar(fMat[1][1]); | 964 dst[SkMatrix::kMScaleY] = SkMScalarToScalar(fMat[1][1]); |
965 dst[SkMatrix::kMTransY] = SkMScalarToScalar(fMat[3][1]); | 965 dst[SkMatrix::kMTransY] = SkMScalarToScalar(fMat[3][1]); |
966 | 966 |
967 dst[SkMatrix::kMPersp0] = SkMScalarToScalar(fMat[0][3]); | 967 dst[SkMatrix::kMPersp0] = SkMScalarToScalar(fMat[0][3]); |
968 dst[SkMatrix::kMPersp1] = SkMScalarToScalar(fMat[1][3]); | 968 dst[SkMatrix::kMPersp1] = SkMScalarToScalar(fMat[1][3]); |
969 dst[SkMatrix::kMPersp2] = SkMScalarToScalar(fMat[3][3]); | 969 dst[SkMatrix::kMPersp2] = SkMScalarToScalar(fMat[3][3]); |
970 | 970 |
971 return dst; | 971 return dst; |
972 } | 972 } |
OLD | NEW |