rsMatrix4x4.h revision 3a97c59c6f8cc974d007080365b82c5177ba6a3f
1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Copyright (C) 2009 The Android Open Source Project 3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * you may not use this file except in compliance with the License. 6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * You may obtain a copy of the License at 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Unless required by applicable law or agreed to in writing, software 11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * See the License for the specific language governing permissions and 14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * limitations under the License. 15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#ifndef ANDROID_RS_MATRIX_H 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#define ANDROID_RS_MATRIX_H 19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 20326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 21326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 22326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams// --------------------------------------------------------------------------- 23326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 24326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 25326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 263a97c59c6f8cc974d007080365b82c5177ba6a3fJason Samsstruct Matrix 27326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams float m[16]; 29326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 30326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams inline float get(int i, int j) const { 31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return m[i*4 + j]; 32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 33326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 34326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams inline void set(int i, int j, float v) { 35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams m[i*4 + j] = v; 36326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void loadIdentity(); 39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void load(const float *); 40326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void load(const Matrix *); 41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void loadRotate(float rot, float x, float y, float z); 43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void loadScale(float x, float y, float z); 44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void loadTranslate(float x, float y, float z); 45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void loadMultiply(const Matrix *lhs, const Matrix *rhs); 46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 478ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams void loadOrtho(float l, float r, float b, float t, float n, float f); 488ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams void loadFrustum(float l, float r, float b, float t, float n, float f); 498ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams 503a97c59c6f8cc974d007080365b82c5177ba6a3fJason Sams void vectorMultiply(float *v4out, const float *v3in) const; 513a97c59c6f8cc974d007080365b82c5177ba6a3fJason Sams 52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void multiply(const Matrix *rhs) { 53326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Matrix tmp; 54326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams tmp.loadMultiply(this, rhs); 55326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams load(&tmp); 56326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 57326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void rotate(float rot, float x, float y, float z) { 58326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Matrix tmp; 59326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams tmp.loadRotate(rot, x, y, z); 60326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams multiply(&tmp); 61326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 62326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void scale(float x, float y, float z) { 63326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Matrix tmp; 64326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams tmp.loadScale(x, y, z); 65326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams multiply(&tmp); 66326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 67326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void translate(float x, float y, float z) { 68326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Matrix tmp; 69326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams tmp.loadTranslate(x, y, z); 70326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams multiply(&tmp); 71326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 72326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 73326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 74326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 75326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 763a97c59c6f8cc974d007080365b82c5177ba6a3fJason Sams 77326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 78326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 79326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 81326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 83326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 84326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#endif 86326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 87326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 89326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 90