1fcf7231249822ff4dae852f1de1f799756689f91Jason Sams/*
2fcf7231249822ff4dae852f1de1f799756689f91Jason Sams * Copyright (C) 2011 The Android Open Source Project
3fcf7231249822ff4dae852f1de1f799756689f91Jason Sams *
4fcf7231249822ff4dae852f1de1f799756689f91Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5fcf7231249822ff4dae852f1de1f799756689f91Jason Sams * you may not use this file except in compliance with the License.
6fcf7231249822ff4dae852f1de1f799756689f91Jason Sams * You may obtain a copy of the License at
7fcf7231249822ff4dae852f1de1f799756689f91Jason Sams *
8fcf7231249822ff4dae852f1de1f799756689f91Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9fcf7231249822ff4dae852f1de1f799756689f91Jason Sams *
10fcf7231249822ff4dae852f1de1f799756689f91Jason Sams * Unless required by applicable law or agreed to in writing, software
11fcf7231249822ff4dae852f1de1f799756689f91Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12fcf7231249822ff4dae852f1de1f799756689f91Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fcf7231249822ff4dae852f1de1f799756689f91Jason Sams * See the License for the specific language governing permissions and
14fcf7231249822ff4dae852f1de1f799756689f91Jason Sams * limitations under the License.
15fcf7231249822ff4dae852f1de1f799756689f91Jason Sams */
16fcf7231249822ff4dae852f1de1f799756689f91Jason Sams
17fcf7231249822ff4dae852f1de1f799756689f91Jason Sams#include "rsMatrix2x2.h"
18fcf7231249822ff4dae852f1de1f799756689f91Jason Sams#include "rsMatrix3x3.h"
19fcf7231249822ff4dae852f1de1f799756689f91Jason Sams#include "rsMatrix4x4.h"
20fcf7231249822ff4dae852f1de1f799756689f91Jason Sams
21fcf7231249822ff4dae852f1de1f799756689f91Jason Sams#include "stdlib.h"
22fcf7231249822ff4dae852f1de1f799756689f91Jason Sams#include "string.h"
23fcf7231249822ff4dae852f1de1f799756689f91Jason Sams#include "math.h"
24fcf7231249822ff4dae852f1de1f799756689f91Jason Sams
25fcf7231249822ff4dae852f1de1f799756689f91Jason Samsusing namespace android;
26fcf7231249822ff4dae852f1de1f799756689f91Jason Samsusing namespace android::renderscript;
27fcf7231249822ff4dae852f1de1f799756689f91Jason Sams
28fcf7231249822ff4dae852f1de1f799756689f91Jason Sams
29fcf7231249822ff4dae852f1de1f799756689f91Jason Samsvoid Matrix2x2::loadIdentity() {
30fcf7231249822ff4dae852f1de1f799756689f91Jason Sams    m[0] = 1.f;
31fcf7231249822ff4dae852f1de1f799756689f91Jason Sams    m[1] = 0.f;
32fcf7231249822ff4dae852f1de1f799756689f91Jason Sams    m[2] = 0.f;
33fcf7231249822ff4dae852f1de1f799756689f91Jason Sams    m[3] = 1.f;
34fcf7231249822ff4dae852f1de1f799756689f91Jason Sams}
35fcf7231249822ff4dae852f1de1f799756689f91Jason Sams
36fcf7231249822ff4dae852f1de1f799756689f91Jason Samsvoid Matrix2x2::load(const float *v) {
37fcf7231249822ff4dae852f1de1f799756689f91Jason Sams    memcpy(m, v, sizeof(m));
38fcf7231249822ff4dae852f1de1f799756689f91Jason Sams}
39fcf7231249822ff4dae852f1de1f799756689f91Jason Sams
40fcf7231249822ff4dae852f1de1f799756689f91Jason Samsvoid Matrix2x2::load(const rs_matrix2x2 *v) {
41fcf7231249822ff4dae852f1de1f799756689f91Jason Sams    memcpy(m, v->m, sizeof(m));
42fcf7231249822ff4dae852f1de1f799756689f91Jason Sams}
43fcf7231249822ff4dae852f1de1f799756689f91Jason Sams
44fcf7231249822ff4dae852f1de1f799756689f91Jason Samsvoid Matrix2x2::loadMultiply(const rs_matrix2x2 *lhs, const rs_matrix2x2 *rhs) {
45fcf7231249822ff4dae852f1de1f799756689f91Jason Sams    for (int i=0 ; i<2 ; i++) {
46fcf7231249822ff4dae852f1de1f799756689f91Jason Sams        float ri0 = 0;
47fcf7231249822ff4dae852f1de1f799756689f91Jason Sams        float ri1 = 0;
48fcf7231249822ff4dae852f1de1f799756689f91Jason Sams        for (int j=0 ; j<2 ; j++) {
49fcf7231249822ff4dae852f1de1f799756689f91Jason Sams            const float rhs_ij = ((const Matrix2x2 *)rhs)->get(i, j);
50fcf7231249822ff4dae852f1de1f799756689f91Jason Sams            ri0 += ((const Matrix2x2 *)lhs)->get(j, 0) * rhs_ij;
51fcf7231249822ff4dae852f1de1f799756689f91Jason Sams            ri1 += ((const Matrix2x2 *)lhs)->get(j, 1) * rhs_ij;
52fcf7231249822ff4dae852f1de1f799756689f91Jason Sams        }
53fcf7231249822ff4dae852f1de1f799756689f91Jason Sams        set(i, 0, ri0);
54fcf7231249822ff4dae852f1de1f799756689f91Jason Sams        set(i, 1, ri1);
55fcf7231249822ff4dae852f1de1f799756689f91Jason Sams    }
56fcf7231249822ff4dae852f1de1f799756689f91Jason Sams}
57fcf7231249822ff4dae852f1de1f799756689f91Jason Sams
58fcf7231249822ff4dae852f1de1f799756689f91Jason Samsvoid Matrix2x2::transpose() {
59fcf7231249822ff4dae852f1de1f799756689f91Jason Sams    float temp = m[1];
60fcf7231249822ff4dae852f1de1f799756689f91Jason Sams    m[1] = m[2];
61fcf7231249822ff4dae852f1de1f799756689f91Jason Sams    m[2] = temp;
62fcf7231249822ff4dae852f1de1f799756689f91Jason Sams}
63fcf7231249822ff4dae852f1de1f799756689f91Jason Sams
64