void SkMatrix44::asRowMajorf(float dst[]) const { const SkMScalar* src = &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::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::asColMajorf(float dst[]) const { const SkMScalar* src = &fMat[0][0]; #ifdef SK_MSCALAR_IS_DOUBLE for (int i = 0; i < 16; ++i) { dst[i] = SkMScalarToFloat(src[i]); } #else memcpy(dst, src, 16 * sizeof(float)); #endif }
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 }
SkMatrix44::operator SkMatrix() const { SkMatrix dst; dst.reset(); // setup our perspective correctly for identity dst[SkMatrix::kMScaleX] = SkMScalarToFloat(fMat[0][0]); dst[SkMatrix::kMSkewX] = SkMScalarToFloat(fMat[1][0]); dst[SkMatrix::kMTransX] = SkMScalarToFloat(fMat[3][0]); dst[SkMatrix::kMSkewY] = SkMScalarToFloat(fMat[0][1]); dst[SkMatrix::kMScaleY] = SkMScalarToFloat(fMat[1][1]); dst[SkMatrix::kMTransY] = SkMScalarToFloat(fMat[3][1]); return dst; }