1/*
2* Copyright 2015 Google Inc.
3*
4* Use of this source code is governed by a BSD-style license that can be
5* found in the LICENSE file.
6*/
7
8#include "GrGLSLUtil.h"
9#include "SkMatrix.h"
10
11template<> void GrGLSLGetMatrix<3>(float* dest, const SkMatrix& src) {
12    // Col 0
13    dest[0] = SkScalarToFloat(src[SkMatrix::kMScaleX]);
14    dest[1] = SkScalarToFloat(src[SkMatrix::kMSkewY]);
15    dest[2] = SkScalarToFloat(src[SkMatrix::kMPersp0]);
16
17    // Col 1
18    dest[3] = SkScalarToFloat(src[SkMatrix::kMSkewX]);
19    dest[4] = SkScalarToFloat(src[SkMatrix::kMScaleY]);
20    dest[5] = SkScalarToFloat(src[SkMatrix::kMPersp1]);
21
22    // Col 2
23    dest[6] = SkScalarToFloat(src[SkMatrix::kMTransX]);
24    dest[7] = SkScalarToFloat(src[SkMatrix::kMTransY]);
25    dest[8] = SkScalarToFloat(src[SkMatrix::kMPersp2]);
26}
27
28template<> void GrGLSLGetMatrix<4>(float* dest, const SkMatrix& src) {
29    // Col 0
30    dest[0] = SkScalarToFloat(src[SkMatrix::kMScaleX]);
31    dest[1] = SkScalarToFloat(src[SkMatrix::kMSkewY]);
32    dest[2] = 0;
33    dest[3] = SkScalarToFloat(src[SkMatrix::kMPersp0]);
34
35    // Col 1
36    dest[4] = SkScalarToFloat(src[SkMatrix::kMSkewX]);
37    dest[5] = SkScalarToFloat(src[SkMatrix::kMScaleY]);
38    dest[6] = 0;
39    dest[7] = SkScalarToFloat(src[SkMatrix::kMPersp1]);
40
41    // Col 2
42    dest[8] = 0;
43    dest[9] = 0;
44    dest[10] = 1;
45    dest[11] = 0;
46
47    // Col 3
48    dest[12] = SkScalarToFloat(src[SkMatrix::kMTransX]);
49    dest[13] = SkScalarToFloat(src[SkMatrix::kMTransY]);
50    dest[14] = 0;
51    dest[15] = SkScalarToFloat(src[SkMatrix::kMPersp2]);
52}
53