Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(355)

Side by Side Diff: src/utils/SkMatrix44.cpp

Issue 25484006: Add perspective support to SkMatrix44 initializers. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Switch SkMatrix inputs to SkScalar and be more careful about scalar comparisons Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « include/utils/SkMatrix44.h ('k') | tests/Matrix44Test.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 884 matching lines...) Expand 10 before | Expand all | Expand 10 after
895 SkDebugf(format, 895 SkDebugf(format,
896 fMat[0][0], fMat[0][1], fMat[0][2], fMat[0][3], 896 fMat[0][0], fMat[0][1], fMat[0][2], fMat[0][3],
897 fMat[1][0], fMat[1][1], fMat[1][2], fMat[1][3], 897 fMat[1][0], fMat[1][1], fMat[1][2], fMat[1][3],
898 fMat[2][0], fMat[2][1], fMat[2][2], fMat[2][3], 898 fMat[2][0], fMat[2][1], fMat[2][2], fMat[2][3],
899 fMat[3][0], fMat[3][1], fMat[3][2], fMat[3][3]); 899 fMat[3][0], fMat[3][1], fMat[3][2], fMat[3][3]);
900 #endif 900 #endif
901 } 901 }
902 902
903 /////////////////////////////////////////////////////////////////////////////// 903 ///////////////////////////////////////////////////////////////////////////////
904 904
905 // TODO: make this support src' perspective elements
906 //
907 static void initFromMatrix(SkMScalar dst[4][4], const SkMatrix& src) { 905 static void initFromMatrix(SkMScalar dst[4][4], const SkMatrix& src) {
908 dst[0][0] = SkScalarToMScalar(src[SkMatrix::kMScaleX]); 906 dst[0][0] = SkScalarToMScalar(src[SkMatrix::kMScaleX]);
909 dst[1][0] = SkScalarToMScalar(src[SkMatrix::kMSkewX]); 907 dst[1][0] = SkScalarToMScalar(src[SkMatrix::kMSkewX]);
910 dst[2][0] = 0; 908 dst[2][0] = 0;
911 dst[3][0] = SkScalarToMScalar(src[SkMatrix::kMTransX]); 909 dst[3][0] = SkScalarToMScalar(src[SkMatrix::kMTransX]);
912 dst[0][1] = SkScalarToMScalar(src[SkMatrix::kMSkewY]); 910 dst[0][1] = SkScalarToMScalar(src[SkMatrix::kMSkewY]);
913 dst[1][1] = SkScalarToMScalar(src[SkMatrix::kMScaleY]); 911 dst[1][1] = SkScalarToMScalar(src[SkMatrix::kMScaleY]);
914 dst[2][1] = 0; 912 dst[2][1] = 0;
915 dst[3][1] = SkScalarToMScalar(src[SkMatrix::kMTransY]); 913 dst[3][1] = SkScalarToMScalar(src[SkMatrix::kMTransY]);
916 dst[0][2] = 0; 914 dst[0][2] = 0;
917 dst[1][2] = 0; 915 dst[1][2] = 0;
918 dst[2][2] = 1; 916 dst[2][2] = 1;
919 dst[3][2] = 0; 917 dst[3][2] = 0;
920 dst[0][3] = 0; 918 dst[0][3] = SkScalarToMScalar(src[SkMatrix::kMPersp0]);
921 dst[1][3] = 0; 919 dst[1][3] = SkScalarToMScalar(src[SkMatrix::kMPersp1]);
922 dst[2][3] = 0; 920 dst[2][3] = 0;
923 dst[3][3] = 1; 921 dst[3][3] = SkScalarToMScalar(src[SkMatrix::kMPersp2]);
924 } 922 }
925 923
926 SkMatrix44::SkMatrix44(const SkMatrix& src) { 924 SkMatrix44::SkMatrix44(const SkMatrix& src) {
927 initFromMatrix(fMat, src); 925 initFromMatrix(fMat, src);
928 } 926 }
929 927
930 SkMatrix44& SkMatrix44::operator=(const SkMatrix& src) { 928 SkMatrix44& SkMatrix44::operator=(const SkMatrix& src) {
931 initFromMatrix(fMat, src); 929 initFromMatrix(fMat, src);
932 930
933 if (src.isIdentity()) { 931 if (src.isIdentity()) {
934 this->setTypeMask(kIdentity_Mask); 932 this->setTypeMask(kIdentity_Mask);
935 } else { 933 } else {
936 this->dirtyTypeMask(); 934 this->dirtyTypeMask();
937 } 935 }
938 return *this; 936 return *this;
939 } 937 }
940 938
941 // TODO: make this support our perspective elements
942 //
943 SkMatrix44::operator SkMatrix() const { 939 SkMatrix44::operator SkMatrix() const {
944 SkMatrix dst; 940 SkMatrix dst;
945 dst.reset(); // setup our perspective correctly for identity
946 941
947 dst[SkMatrix::kMScaleX] = SkMScalarToScalar(fMat[0][0]); 942 dst[SkMatrix::kMScaleX] = SkMScalarToScalar(fMat[0][0]);
948 dst[SkMatrix::kMSkewX] = SkMScalarToScalar(fMat[1][0]); 943 dst[SkMatrix::kMSkewX] = SkMScalarToScalar(fMat[1][0]);
949 dst[SkMatrix::kMTransX] = SkMScalarToScalar(fMat[3][0]); 944 dst[SkMatrix::kMTransX] = SkMScalarToScalar(fMat[3][0]);
950 945
951 dst[SkMatrix::kMSkewY] = SkMScalarToScalar(fMat[0][1]); 946 dst[SkMatrix::kMSkewY] = SkMScalarToScalar(fMat[0][1]);
952 dst[SkMatrix::kMScaleY] = SkMScalarToScalar(fMat[1][1]); 947 dst[SkMatrix::kMScaleY] = SkMScalarToScalar(fMat[1][1]);
953 dst[SkMatrix::kMTransY] = SkMScalarToScalar(fMat[3][1]); 948 dst[SkMatrix::kMTransY] = SkMScalarToScalar(fMat[3][1]);
954 949
950 dst[SkMatrix::kMPersp0] = SkMScalarToScalar(fMat[0][3]);
951 dst[SkMatrix::kMPersp1] = SkMScalarToScalar(fMat[1][3]);
952 dst[SkMatrix::kMPersp2] = SkMScalarToScalar(fMat[3][3]);
953
955 return dst; 954 return dst;
956 } 955 }
OLDNEW
« no previous file with comments | « include/utils/SkMatrix44.h ('k') | tests/Matrix44Test.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698