Lines Matching refs:mat

83 static INLINE void matrix_init(struct matrix *mat,
86 memcpy(mat->m, val, sizeof(VGfloat) * 9);
89 static INLINE void matrix_inits(struct matrix *mat,
94 mat->m[0] = m11; mat->m[1] = m12; mat->m[2] = m13;
95 mat->m[3] = m21; mat->m[4] = m22; mat->m[5] = m23;
96 mat->m[6] = m31; mat->m[7] = m32; mat->m[8] = m33;
152 static INLINE void matrix_map_point(struct matrix *mat,
160 *out_x = mat->m[0]*tmp_x + mat->m[3]*tmp_y + mat->m[6];
161 *out_y = mat->m[1]*tmp_x + mat->m[4]*tmp_y + mat->m[7];
162 if (!matrix_is_affine(mat)) {
163 VGfloat w = 1/(mat->m[2]*tmp_x + mat->m[5]*tmp_y + mat->m[8]);
212 struct matrix mat;
230 matrix_load_identity(&mat);
231 mat.m[0] = cos_val; mat.m[1] = sin_val;
232 mat.m[3] = -sin_val; mat.m[4] = cos_val;
234 matrix_mult(dst, &mat);
246 static INLINE VGfloat matrix_determinant(struct matrix *mat)
248 return mat->m[0]*(mat->m[8]*mat->m[4]-mat->m[7]*mat->m[5]) -
249 mat->m[3]*(mat->m[8]*mat->m[1]-mat->m[7]*mat->m[2])+
250 mat->m[6]*(mat->m[5]*mat->m[1]-mat->m[4]*mat->m[2]);
254 static INLINE void matrix_adjoint(struct matrix *mat)
257 h[0] = mat->m[4]*mat->m[8] - mat->m[5]*mat->m[7];
258 h[3] = mat->m[5]*mat->m[6] - mat->m[3]*mat->m[8];
259 h[6] = mat->m[3]*mat->m[7] - mat->m[4]*mat->m[6];
260 h[1] = mat->m[2]*mat->m[7] - mat->m[1]*mat->m[8];
261 h[4] = mat->m[0]*mat->m[8] - mat->m[2]*mat->m[6];
262 h[7] = mat->m[1]*mat->m[6] - mat->m[0]*mat->m[7];
263 h[2] = mat->m[1]*mat->m[5] - mat->m[2]*mat->m[4];
264 h[5] = mat->m[2]*mat->m[3] - mat->m[0]*mat->m[5];
265 h[8] = mat->m[0]*mat->m[4] - mat->m[1]*mat->m[3];
268 memcpy(mat->m, h, sizeof(VGfloat) * 9);
271 static INLINE void matrix_divs(struct matrix *mat,
274 mat->m[0] /= s;
275 mat->m[1] /= s;
276 mat->m[2] /= s;
277 mat->m[3] /= s;
278 mat->m[4] /= s;
279 mat->m[5] /= s;
280 mat->m[6] /= s;
281 mat->m[7] /= s;
282 mat->m[8] /= s;
285 static INLINE VGboolean matrix_invert(struct matrix *mat)
287 VGfloat det = matrix_determinant(mat);
292 matrix_adjoint(mat);
293 matrix_divs(mat, det);
297 static INLINE VGboolean matrix_is_invertible(struct matrix *mat)
299 return !floatIsZero(matrix_determinant(mat));
307 struct matrix *mat)
314 matrix_inits(mat,
343 matrix_inits(mat,
356 struct matrix *mat)
360 mat))
363 return matrix_invert(mat);
375 struct matrix *mat)
381 mat))
389 matrix_mult(mat, &sqr_to_qd);