add explicit mapScalars and mapMScalars entry-points, instead of just map()

git-svn-id: http://skia.googlecode.com/svn/trunk@6373 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
reed@google.com 2012-11-09 21:39:48 +00:00
Родитель 20d44677a1
Коммит 1ea95be560
3 изменённых файлов: 39 добавлений и 5 удалений

Просмотреть файл

@ -186,9 +186,29 @@ public:
/** Apply the matrix to the src vector, returning the new vector in dst. /** Apply the matrix to the src vector, returning the new vector in dst.
It is legal for src and dst to point to the same memory. It is legal for src and dst to point to the same memory.
*/ */
void map(const SkScalar src[4], SkScalar dst[4]) const; void mapScalars(const SkScalar src[4], SkScalar dst[4]) const;
void mapScalars(SkScalar vec[4]) const {
this->mapScalars(vec, vec);
}
// DEPRECATED: call mapScalars()
void map(const SkScalar src[4], SkScalar dst[4]) const {
this->mapScalars(src, dst);
}
// DEPRECATED: call mapScalars()
void map(SkScalar vec[4]) const { void map(SkScalar vec[4]) const {
this->map(vec, vec); this->mapScalars(vec, vec);
}
#ifdef SK_MSCALAR_IS_DOUBLE
void mapMScalars(SkMScalar src[4], SkMScalar dst[4]) const;
#else
void mapMScalars(SkMScalar src[4], SkMScalar dst[4]) const {
this->mapScalars(src, dst);
}
#endif
void mapMScalars(SkMScalar vec[4]) const {
this->mapMScalars(vec, vec);
} }
friend SkVector4 operator*(const SkMatrix44& m, const SkVector4& src) { friend SkVector4 operator*(const SkMatrix44& m, const SkVector4& src) {

Просмотреть файл

@ -323,7 +323,7 @@ bool SkMatrix44::invert(SkMatrix44* inverse) const {
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
void SkMatrix44::map(const SkScalar src[4], SkScalar dst[4]) const { void SkMatrix44::mapScalars(const SkScalar src[4], SkScalar dst[4]) const {
SkScalar result[4]; SkScalar result[4];
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
SkMScalar value = 0; SkMScalar value = 0;
@ -335,6 +335,20 @@ void SkMatrix44::map(const SkScalar src[4], SkScalar dst[4]) const {
memcpy(dst, result, sizeof(result)); memcpy(dst, result, sizeof(result));
} }
#ifdef SK_MSCALAR_IS_DOUBLE
void SkMatrix44::mapMScalars(const SkMScalar src[4], SkMScalar dst[4]) const {
SkMScalar result[4];
for (int i = 0; i < 4; i++) {
SkMScalar value = 0;
for (int j = 0; j < 4; j++) {
value += fMat[j][i] * src[j];
}
result[i] = SkMScalarToScalar(value);
}
memcpy(dst, result, sizeof(result));
}
#endif
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
void SkMatrix44::dump() const { void SkMatrix44::dump() const {

Просмотреть файл

@ -95,7 +95,7 @@ static void test_concat(skiatest::Reporter* reporter) {
d.preConcat(b); d.preConcat(b);
REPORTER_ASSERT(reporter, d == c); REPORTER_ASSERT(reporter, d == c);
c.map(src, dst); c.map(src + 4, dst + 4); c.mapScalars(src, dst); c.mapScalars(src + 4, dst + 4);
for (i = 0; i < 3; ++i) { for (i = 0; i < 3; ++i) {
REPORTER_ASSERT(reporter, 10 == dst[i]); REPORTER_ASSERT(reporter, 10 == dst[i]);
REPORTER_ASSERT(reporter, 12 == dst[i + 4]); REPORTER_ASSERT(reporter, 12 == dst[i + 4]);
@ -107,7 +107,7 @@ static void test_concat(skiatest::Reporter* reporter) {
d.postConcat(b); d.postConcat(b);
REPORTER_ASSERT(reporter, d == c); REPORTER_ASSERT(reporter, d == c);
c.map(src, dst); c.map(src + 4, dst + 4); c.mapScalars(src, dst); c.mapScalars(src + 4, dst + 4);
for (i = 0; i < 3; ++i) { for (i = 0; i < 3; ++i) {
REPORTER_ASSERT(reporter, 20 == dst[i]); REPORTER_ASSERT(reporter, 20 == dst[i]);
REPORTER_ASSERT(reporter, 22 == dst[i + 4]); REPORTER_ASSERT(reporter, 22 == dst[i + 4]);