164c4728c70001ed074fecf5c4e083781987b12e9egdaniel/*
264c4728c70001ed074fecf5c4e083781987b12e9egdaniel* Copyright 2015 Google Inc.
364c4728c70001ed074fecf5c4e083781987b12e9egdaniel*
464c4728c70001ed074fecf5c4e083781987b12e9egdaniel* Use of this source code is governed by a BSD-style license that can be
564c4728c70001ed074fecf5c4e083781987b12e9egdaniel* found in the LICENSE file.
664c4728c70001ed074fecf5c4e083781987b12e9egdaniel*/
764c4728c70001ed074fecf5c4e083781987b12e9egdaniel
864c4728c70001ed074fecf5c4e083781987b12e9egdaniel#include "GrGLSLUtil.h"
964c4728c70001ed074fecf5c4e083781987b12e9egdaniel#include "SkMatrix.h"
1064c4728c70001ed074fecf5c4e083781987b12e9egdaniel
1164c4728c70001ed074fecf5c4e083781987b12e9egdanieltemplate<> void GrGLSLGetMatrix<3>(float* dest, const SkMatrix& src) {
1264c4728c70001ed074fecf5c4e083781987b12e9egdaniel    // Col 0
1364c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[0] = SkScalarToFloat(src[SkMatrix::kMScaleX]);
1464c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[1] = SkScalarToFloat(src[SkMatrix::kMSkewY]);
1564c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[2] = SkScalarToFloat(src[SkMatrix::kMPersp0]);
1664c4728c70001ed074fecf5c4e083781987b12e9egdaniel
1764c4728c70001ed074fecf5c4e083781987b12e9egdaniel    // Col 1
1864c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[3] = SkScalarToFloat(src[SkMatrix::kMSkewX]);
1964c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[4] = SkScalarToFloat(src[SkMatrix::kMScaleY]);
2064c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[5] = SkScalarToFloat(src[SkMatrix::kMPersp1]);
2164c4728c70001ed074fecf5c4e083781987b12e9egdaniel
2264c4728c70001ed074fecf5c4e083781987b12e9egdaniel    // Col 2
2364c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[6] = SkScalarToFloat(src[SkMatrix::kMTransX]);
2464c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[7] = SkScalarToFloat(src[SkMatrix::kMTransY]);
2564c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[8] = SkScalarToFloat(src[SkMatrix::kMPersp2]);
2664c4728c70001ed074fecf5c4e083781987b12e9egdaniel}
2764c4728c70001ed074fecf5c4e083781987b12e9egdaniel
2864c4728c70001ed074fecf5c4e083781987b12e9egdanieltemplate<> void GrGLSLGetMatrix<4>(float* dest, const SkMatrix& src) {
2964c4728c70001ed074fecf5c4e083781987b12e9egdaniel    // Col 0
3064c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[0] = SkScalarToFloat(src[SkMatrix::kMScaleX]);
3164c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[1] = SkScalarToFloat(src[SkMatrix::kMSkewY]);
3264c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[2] = 0;
3364c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[3] = SkScalarToFloat(src[SkMatrix::kMPersp0]);
3464c4728c70001ed074fecf5c4e083781987b12e9egdaniel
3564c4728c70001ed074fecf5c4e083781987b12e9egdaniel    // Col 1
3664c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[4] = SkScalarToFloat(src[SkMatrix::kMSkewX]);
3764c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[5] = SkScalarToFloat(src[SkMatrix::kMScaleY]);
3864c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[6] = 0;
3964c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[7] = SkScalarToFloat(src[SkMatrix::kMPersp1]);
4064c4728c70001ed074fecf5c4e083781987b12e9egdaniel
4164c4728c70001ed074fecf5c4e083781987b12e9egdaniel    // Col 2
4264c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[8] = 0;
4364c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[9] = 0;
4464c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[10] = 1;
4564c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[11] = 0;
4664c4728c70001ed074fecf5c4e083781987b12e9egdaniel
4764c4728c70001ed074fecf5c4e083781987b12e9egdaniel    // Col 3
4864c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[12] = SkScalarToFloat(src[SkMatrix::kMTransX]);
4964c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[13] = SkScalarToFloat(src[SkMatrix::kMTransY]);
5064c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[14] = 0;
5164c4728c70001ed074fecf5c4e083781987b12e9egdaniel    dest[15] = SkScalarToFloat(src[SkMatrix::kMPersp2]);
5264c4728c70001ed074fecf5c4e083781987b12e9egdaniel}
53