Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.18 KB | None | 0 0
  1. /*!
  2.     \brief Transform an object space vertex applying the given affine matrix.
  3.     \param dst output transformed vertex.
  4.     \param src input object space vertex.
  5.     \param matrix the affine matrix to aplly.
  6. */
  7. AM_INLINE void amRasVertexTransform(AM_RAS_INPUT_VERTEX_TYPE *dst,
  8.                                     const AM_RAS_INPUT_VERTEX_TYPE *src,
  9.                                     const AM_RAS_MATRIX_TYPE *matrix) {
  10.  
  11. #if defined(AM_FIXED_POINT_PIPELINE)
  12.     AMint64 xa = INT32_INT32_MUL(matrix->a[0][0], src->x);
  13.     AMint64 xb = INT32_INT32_MUL(matrix->a[0][1], src->y);
  14.     AMint64 ya = INT32_INT32_MUL(matrix->a[1][0], src->x);
  15.     AMint64 yb = INT32_INT32_MUL(matrix->a[1][1], src->y);
  16.     //AMint64 x = (((xa + xb) >> 16) + matrix->a[0][2]) >> (15 - AM_RAS_FIXED_PRECISION);
  17.     //AMint64 y = (((ya + yb) >> 16) + matrix->a[1][2]) >> (15 - AM_RAS_FIXED_PRECISION);
  18.     AMint64 x = INT64_RSHIFT(INT64_INT32_ADD(INT64_RSHIFT(INT64_ADD(xa, xb), 16), matrix->a[0][2]), 15 - AM_RAS_FIXED_PRECISION);
  19.     AMint64 y = INT64_RSHIFT(INT64_INT32_ADD(INT64_RSHIFT(INT64_ADD(ya, yb), 16), matrix->a[1][2]), 15 - AM_RAS_FIXED_PRECISION);
  20.     AM_VECT2_SET(dst, (AMfixed)(INT64_INT32_CAST(x)), (AMfixed)(INT64_INT32_CAST(y)))
  21. #else
  22.     AM_MATRIX33_VECT2_MUL(dst, matrix, src)
  23. #endif
  24. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement