10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/* 20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2011 The Android Open Source Project 30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 40f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * you may not use this file except in compliance with the License. 60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * You may obtain a copy of the License at 70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * http://www.apache.org/licenses/LICENSE-2.0 90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Unless required by applicable law or agreed to in writing, software 110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See the License for the specific language governing permissions and 140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * limitations under the License. 150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */ 160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsMatrix2x2.h" 180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsMatrix3x3.h" 190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsMatrix4x4.h" 200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "stdlib.h" 220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "string.h" 230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "math.h" 240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesusing namespace android; 260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesusing namespace android::renderscript; 270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid Matrix3x3::loadIdentity() { 290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m[0] = 1.f; 300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m[1] = 0.f; 310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m[2] = 0.f; 320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m[3] = 0.f; 330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m[4] = 1.f; 340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m[5] = 0.f; 350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m[6] = 0.f; 360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m[7] = 0.f; 370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines m[8] = 1.f; 380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid Matrix3x3::load(const float *v) { 410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines memcpy(m, v, sizeof(m)); 420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid Matrix3x3::load(const rs_matrix3x3 *v) { 450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines memcpy(m, v->m, sizeof(m)); 460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid Matrix3x3::loadMultiply(const rs_matrix3x3 *lhs, const rs_matrix3x3 *rhs) { 490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (int i=0 ; i<3 ; i++) { 500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines float ri0 = 0; 510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines float ri1 = 0; 520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines float ri2 = 0; 530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (int j=0 ; j<3 ; j++) { 540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const float rhs_ij = ((const Matrix3x3 *)rhs)->get(i, j); 550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ri0 += ((const Matrix3x3 *)lhs)->get(j, 0) * rhs_ij; 560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ri1 += ((const Matrix3x3 *)lhs)->get(j, 1) * rhs_ij; 570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ri2 += ((const Matrix3x3 *)lhs)->get(j, 2) * rhs_ij; 580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines set(i, 0, ri0); 600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines set(i, 1, ri1); 610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines set(i, 2, ri2); 620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid Matrix3x3::transpose() { 660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int i, j; 670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines float temp; 680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (i = 0; i < 2; ++i) { 690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines for (j = i + 1; j < 3; ++j) { 700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines temp = get(i, j); 710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines set(i, j, get(j, i)); 720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines set(j, i, temp); 730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 77