jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=a1584c8a5db0bdacd8f14669f77d2c4f4de4d1c3
commit a1584c8a5db0bdacd8f14669f77d2c4f4de4d1c3 Author: se.osadchy <se.osad...@samsung.com> Date: Wed Feb 17 14:14:24 2016 +0900 evas: Update eina_vector, add new function. Summary: Add direction transform for eina_vector3. Reviewers: cedric, Hermet, jpeg Reviewed By: jpeg Subscribers: jpeg Differential Revision: https://phab.enlightenment.org/D3692 --- src/lib/eina/eina_inline_vector.x | 14 ++++++++++++++ src/lib/eina/eina_vector.h | 12 ++++++++++++ src/tests/eina/eina_test_vector.c | 3 +++ 3 files changed, 29 insertions(+) diff --git a/src/lib/eina/eina_inline_vector.x b/src/lib/eina/eina_inline_vector.x index 1332a90..d7dd8d8 100644 --- a/src/lib/eina/eina_inline_vector.x +++ b/src/lib/eina/eina_inline_vector.x @@ -283,6 +283,20 @@ eina_vector3_transform(Eina_Vector3 *out, const Eina_Matrix3 *m, const Eina_Vec } static inline void +eina_vector3_homogeneous_direction_transform(Eina_Vector3 *out, const Eina_Matrix4 *m, const Eina_Vector3 *v) +{ + if (eina_matrix4_type_get(m) == EINA_MATRIX_TYPE_IDENTITY) + { + eina_vector3_copy(out, v); + return; + } + + out->x = (m->xx * v->x) + (m->yx * v->y) + (m->zx * v->z); + out->y = (m->xy * v->x) + (m->yy * v->y) + (m->zy * v->z); + out->z = (m->xz * v->x) + (m->yz * v->y) + (m->zz * v->z); +} + +static inline void eina_vector3_homogeneous_position_transform(Eina_Vector3 *out, const Eina_Matrix4 *m, const Eina_Vector3 *v) { diff --git a/src/lib/eina/eina_vector.h b/src/lib/eina/eina_vector.h index 1c95c3d..5653e0a 100644 --- a/src/lib/eina/eina_vector.h +++ b/src/lib/eina/eina_vector.h @@ -424,6 +424,18 @@ static inline void eina_vector3_transform(Eina_Vector3 *out, const Eina_Matrix3 const Eina_Vector3 *v); /** + * @brief Homogeneous direction transform vector. + * + * @param out The resulting vector. + * @param m The matrix for transform. + * @param v The vector for transform. + * + * @since 1.18 + */ +static inline void eina_vector3_homogeneous_direction_transform(Eina_Vector3 *out, const Eina_Matrix4 *m, + const Eina_Vector3 *v); + +/** * @brief Homogeneous position transform vector. * * @param out The resulting vector. diff --git a/src/tests/eina/eina_test_vector.c b/src/tests/eina/eina_test_vector.c index 8657685..a155ef8 100644 --- a/src/tests/eina/eina_test_vector.c +++ b/src/tests/eina/eina_test_vector.c @@ -217,6 +217,9 @@ START_TEST(eina_test_vector3_operations) &v1, &v2, &v3); fail_if(res2 != EINA_TRUE); + eina_vector3_homogeneous_direction_transform(&v3, &m4, &v1); + fail_if((v3.x != 12) || (v3.y != 12) || (v3.z != 12)); + eina_shutdown(); } END_TEST --