1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/* 2d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Copyright (C) 2009 The Android Open Source Project 3d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * you may not use this file except in compliance with the License. 6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * You may obtain a copy of the License at 7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 8d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Unless required by applicable law or agreed to in writing, software 11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * See the License for the specific language governing permissions and 14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * limitations under the License. 15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams */ 16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 17d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#ifndef ANDROID_RS_MATRIX_H 18d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#define ANDROID_RS_MATRIX_H 19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 22d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 23d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace android { 24d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace renderscript { 25d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 26e9ad9a719dc66437ddf021d13e6ca736a23b5413Jason Samsstruct Matrix 27d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 28d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams float m[16]; 29d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 30d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams inline float get(int i, int j) const { 31d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams return m[i*4 + j]; 32d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 34d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams inline void set(int i, int j, float v) { 35d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams m[i*4 + j] = v; 36d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 37d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 38d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void loadIdentity(); 39d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void load(const float *); 40d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void load(const Matrix *); 41d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 42d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void loadRotate(float rot, float x, float y, float z); 43d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void loadScale(float x, float y, float z); 44d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void loadTranslate(float x, float y, float z); 45d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void loadMultiply(const Matrix *lhs, const Matrix *rhs); 46d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 479c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams void loadOrtho(float l, float r, float b, float t, float n, float f); 489c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams void loadFrustum(float l, float r, float b, float t, float n, float f); 499c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams 50e9ad9a719dc66437ddf021d13e6ca736a23b5413Jason Sams void vectorMultiply(float *v4out, const float *v3in) const; 51e9ad9a719dc66437ddf021d13e6ca736a23b5413Jason Sams 52d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void multiply(const Matrix *rhs) { 53d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams Matrix tmp; 54d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams tmp.loadMultiply(this, rhs); 55d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams load(&tmp); 56d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 57d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void rotate(float rot, float x, float y, float z) { 58d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams Matrix tmp; 59d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams tmp.loadRotate(rot, x, y, z); 60d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams multiply(&tmp); 61d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 62d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void scale(float x, float y, float z) { 63d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams Matrix tmp; 64d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams tmp.loadScale(x, y, z); 65d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams multiply(&tmp); 66d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 67d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void translate(float x, float y, float z) { 68d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams Matrix tmp; 69d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams tmp.loadTranslate(x, y, z); 70d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams multiply(&tmp); 71d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 72d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 73d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 74d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 75d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}; 76e9ad9a719dc66437ddf021d13e6ca736a23b5413Jason Sams 77d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 78d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 79d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 80d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 81d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 82d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 83d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 84d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 85d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#endif 86d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 87d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 88d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 89d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 90