1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 2411f5996bccf88d5d2f8d1f003d39a8d76365244Stephen Hines * Copyright (C) 2009-2012 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 1787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#ifndef ANDROID_RS_MATRIX_4x4_H 1887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#define ANDROID_RS_MATRIX_4x4_H 19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 2087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsType.h" 21326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 22326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 23326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams// --------------------------------------------------------------------------- 24326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 25326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 2787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstruct Matrix4x4 : public rs_matrix4x4 { 281bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet float get(uint32_t col, uint32_t row) const { 291bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet return m[col*4 + row]; 30326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 321bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet void set(uint32_t col, uint32_t row, float v) { 331bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet m[col*4 + row] = v; 34326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 36326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void loadIdentity(); 37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void load(const float *); 3887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams void load(const rs_matrix4x4 *); 3987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams void load(const rs_matrix3x3 *); 4087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams void load(const rs_matrix2x2 *); 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); 4587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams void loadMultiply(const rs_matrix4x4 *lhs, const rs_matrix4x4 *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); 4987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams void loadPerspective(float fovy, float aspect, float near, float far); 508ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams 511bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet // Note: This assumes that the input vector (in) is of length 3. 523a97c59c6f8cc974d007080365b82c5177ba6a3fJason Sams void vectorMultiply(float *v4out, const float *v3in) const; 533a97c59c6f8cc974d007080365b82c5177ba6a3fJason Sams 5487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams bool inverse(); 5587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams bool inverseTranspose(); 5687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams void transpose(); 5787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 58f47fb9b7ce529cee60ad211634bb27ed623f1098Jason Sams void logv(const char *s) const; 5987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 6087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 6187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams void multiply(const rs_matrix4x4 *rhs) { 621bb2eed69caa28cf8198d58db7d9134cc2f563f5Jean-Luc Brouillet loadMultiply(this, rhs); 63326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 64326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void rotate(float rot, float x, float y, float z) { 6587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams Matrix4x4 tmp; 66326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams tmp.loadRotate(rot, x, y, z); 67326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams multiply(&tmp); 68326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 69326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void scale(float x, float y, float z) { 7087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams Matrix4x4 tmp; 71326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams tmp.loadScale(x, y, z); 72326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams multiply(&tmp); 73326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 74326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void translate(float x, float y, float z) { 7587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams Matrix4x4 tmp; 76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams tmp.loadTranslate(x, y, z); 77326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams multiply(&tmp); 78326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 79326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 803a97c59c6f8cc974d007080365b82c5177ba6a3fJason Sams 81326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 83326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 84411f5996bccf88d5d2f8d1f003d39a8d76365244Stephen Hines#endif // ANDROID_RS_MATRIX_4x4_H 85