sdk: be C++ friendly
[platform/upstream/weston.git] / shared / matrix.h
1 /*
2  * Copyright © 2008-2011 Kristian Høgsberg
3  * Copyright © 2012 Collabora, Ltd.
4  *
5  * Permission to use, copy, modify, distribute, and sell this software and
6  * its documentation for any purpose is hereby granted without fee, provided
7  * that the above copyright notice appear in all copies and that both that
8  * copyright notice and this permission notice appear in supporting
9  * documentation, and that the name of the copyright holders not be used in
10  * advertising or publicity pertaining to distribution of the software
11  * without specific, written prior permission.  The copyright holders make
12  * no representations about the suitability of this software for any
13  * purpose.  It is provided "as is" without express or implied warranty.
14  *
15  * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
16  * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
17  * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
18  * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
19  * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
20  * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
21  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22  */
23
24 #ifndef WESTON_MATRIX_H
25 #define WESTON_MATRIX_H
26
27 #ifdef  __cplusplus
28 extern "C" {
29 #endif
30
31 enum weston_matrix_transform_type {
32         WESTON_MATRIX_TRANSFORM_TRANSLATE       = (1 << 0),
33         WESTON_MATRIX_TRANSFORM_SCALE           = (1 << 1),
34         WESTON_MATRIX_TRANSFORM_ROTATE          = (1 << 2),
35         WESTON_MATRIX_TRANSFORM_OTHER           = (1 << 3),
36 };
37
38 struct weston_matrix {
39         float d[16];
40         unsigned int type;
41 };
42
43 struct weston_vector {
44         float f[4];
45 };
46
47 void
48 weston_matrix_init(struct weston_matrix *matrix);
49 void
50 weston_matrix_multiply(struct weston_matrix *m, const struct weston_matrix *n);
51 void
52 weston_matrix_scale(struct weston_matrix *matrix, float x, float y, float z);
53 void
54 weston_matrix_translate(struct weston_matrix *matrix,
55                         float x, float y, float z);
56 void
57 weston_matrix_rotate_xy(struct weston_matrix *matrix, float cos, float sin);
58 void
59 weston_matrix_transform(struct weston_matrix *matrix, struct weston_vector *v);
60
61 int
62 weston_matrix_invert(struct weston_matrix *inverse,
63                      const struct weston_matrix *matrix);
64
65 #ifdef UNIT_TEST
66 #  define MATRIX_TEST_EXPORT WL_EXPORT
67
68 int
69 matrix_invert(double *A, unsigned *p, const struct weston_matrix *matrix);
70
71 void
72 inverse_transform(const double *LU, const unsigned *p, float *v);
73
74 #else
75 #  define MATRIX_TEST_EXPORT static
76 #endif
77
78 #ifdef  __cplusplus
79 }
80 #endif
81
82 #endif /* WESTON_MATRIX_H */