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

-- 


Reply via email to