summaryrefslogtreecommitdiff
path: root/libs/hwui/Matrix.cpp
diff options
context:
space:
mode:
authorRomain Guy <romainguy@android.com>2010-07-16 14:12:24 -0700
committerRomain Guy <romainguy@android.com>2010-07-16 14:12:24 -0700
commit079ba2c85b15e882629b8d188f5fbdb42f7f8eea (patch)
treedcdad4233c75952bea11e4d5b945996a0f930a9a /libs/hwui/Matrix.cpp
parentebd6f94dbdafdb14d620d2bd8e08535a309f266a (diff)
Improve clip support (add intersect, union and replace.)
This change also modifies the way the clip is stored. The clip is now always stored in screen-space coordinates. Change-Id: I96375784d82dfe975bc6477a159e6866e7052487
Diffstat (limited to 'libs/hwui/Matrix.cpp')
-rw-r--r--libs/hwui/Matrix.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/libs/hwui/Matrix.cpp b/libs/hwui/Matrix.cpp
index 877d3bbfb2bd..b45920242b1f 100644
--- a/libs/hwui/Matrix.cpp
+++ b/libs/hwui/Matrix.cpp
@@ -93,6 +93,25 @@ void Matrix4::copyTo(SkMatrix& v) const {
v.set(SkMatrix::kMPersp2, data[15]);
}
+void Matrix4::loadInverse(const Matrix4& v) {
+ double scale = 1.0 /
+ (v.data[0] * ((double) v.data[5] * v.data[15] - (double) v.data[13] * v.data[7]) +
+ v.data[4] * ((double) v.data[13] * v.data[3] - (double) v.data[1] * v.data[15]) +
+ v.data[12] * ((double) v.data[1] * v.data[7] - (double) v.data[5] * v.data[3]));
+
+ data[0] = (v.data[5] * v.data[15] - v.data[13] * v.data[7]) * scale;
+ data[4] = (v.data[12] * v.data[7] - v.data[4] * v.data[15]) * scale;
+ data[12] = (v.data[4] * v.data[13] - v.data[12] * v.data[5]) * scale;
+
+ data[1] = (v.data[13] * v.data[3] - v.data[1] * v.data[15]) * scale;
+ data[5] = (v.data[0] * v.data[15] - v.data[12] * v.data[3]) * scale;
+ data[13] = (v.data[12] * v.data[1] - v.data[0] * v.data[13]) * scale;
+
+ data[3] = (v.data[1] * v.data[7] - v.data[5] * v.data[3]) * scale;
+ data[7] = (v.data[4] * v.data[3] - v.data[0] * v.data[7]) * scale;
+ data[15] = (v.data[0] * v.data[5] - v.data[4] * v.data[1]) * scale;
+}
+
void Matrix4::copyTo(float* v) const {
memcpy(v, data, sizeof(data));
}