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