diff options
author | 2012-11-19 21:02:06 +0000 | |
---|---|---|
committer | 2012-11-19 21:02:06 +0000 | |
commit | f11cf9ff885c81e29f55283174ca34ce2fc5fd23 (patch) | |
tree | abc3cbbe3f4ed4e97b40e0fb2836d92c229b5345 /src | |
parent | 8a1cdaece7e1d009befb84f21bb82370025bf4d6 (diff) |
Add SkMatrix44::setColMajord, etc.
We have accessors for efficiently getting the matirx data, and it would be nice
if we had similar methods for setting the matrix entries.
Review URL: https://codereview.appspot.com/6851063
git-svn-id: http://skia.googlecode.com/svn/trunk@6494 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src')
-rw-r--r-- | src/utils/SkMatrix44.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/utils/SkMatrix44.cpp b/src/utils/SkMatrix44.cpp index 0e7ad167c2..42c38f7b4f 100644 --- a/src/utils/SkMatrix44.cpp +++ b/src/utils/SkMatrix44.cpp @@ -82,6 +82,52 @@ void SkMatrix44::asRowMajord(double dst[]) const { } } +void SkMatrix44::setColMajorf(const float src[]) { + SkMScalar* dst = &fMat[0][0]; +#ifdef SK_MSCALAR_IS_DOUBLE + for (int i = 0; i < 16; ++i) { + dst[i] = SkMScalarToFloat(src[i]); + } +#elif defined SK_MSCALAR_IS_FLOAT + memcpy(dst, src, 16 * sizeof(float)); +#endif +} + +void SkMatrix44::setColMajord(const double src[]) { + SkMScalar* dst = &fMat[0][0]; +#ifdef SK_MSCALAR_IS_DOUBLE + memcpy(dst, src, 16 * sizeof(double)); +#elif defined SK_MSCALAR_IS_FLOAT + for (int i = 0; i < 16; ++i) { + dst[i] = SkMScalarToDouble(src[i]); + } +#endif +} + +void SkMatrix44::setRowMajorf(const float src[]) { + SkMScalar* dst = &fMat[0][0]; + for (int i = 0; i < 4; ++i) { + dst[0] = SkMScalarToFloat(src[0]); + dst[4] = SkMScalarToFloat(src[1]); + dst[8] = SkMScalarToFloat(src[2]); + dst[12] = SkMScalarToFloat(src[3]); + src += 4; + dst += 1; + } +} + +void SkMatrix44::setRowMajord(const double src[]) { + SkMScalar* dst = &fMat[0][0]; + for (int i = 0; i < 4; ++i) { + dst[0] = SkMScalarToDouble(src[0]); + dst[4] = SkMScalarToDouble(src[1]); + dst[8] = SkMScalarToDouble(src[2]); + dst[12] = SkMScalarToDouble(src[3]); + src += 4; + dst += 1; + } +} + /////////////////////////////////////////////////////////////////////////////// bool SkMatrix44::isIdentity() const { |