use eina_fp fixed point sincos table to reduce calc overhead.
authorCarsten Haitzler <raster@rasterman.com>
Mon, 16 May 2011 10:51:02 +0000 (10:51 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Mon, 16 May 2011 10:51:02 +0000 (10:51 +0000)
SVN revision: 59442

legacy/ecore/src/lib/ecore/ecore_anim.c

index 990c417347e1d26b19c120210ac58ae95db98baf..ad953f782f9b51716676965e59eef0d0381f1ba9 100644 (file)
@@ -214,12 +214,24 @@ ecore_animator_timeline_add(double runtime, Ecore_Timeline_Cb func, const void *
    return animator;
 }
 
+static double
+_pos_map_sin(double in)
+{
+   return eina_f32p32_double_to(eina_f32p32_sin(eina_f32p32_double_from(in)));
+}
+
+static double
+_pos_map_cos(double in)
+{
+   return eina_f32p32_double_to(eina_f32p32_cos(eina_f32p32_double_from(in)));
+}
+
 static double
 _pos_map_accel_factor(double pos, double v1)
 {
    int i, fact = (int)v1;
    double p, o1 = pos, o2 = pos, v;
-   p = 1.0 - sin((M_PI / 2.0) + ((pos * M_PI) / 2.0));
+   p = 1.0 - _pos_map_sin((M_PI / 2.0) + ((pos * M_PI) / 2.0));
    o2 = p;
    for (i = 0; i < fact; i++)
      {
@@ -255,7 +267,7 @@ _pos_map_spring(double pos, int bounces, double decfac)
    if (b1 < 0) b1 = 0;
    decpos = (double)b1 / (double)b2;
    decay = _pos_map_accel_factor(1.0 - decpos, decfac);
-   return sin((M_PI / 2.0) + (p2 * len)) * decay;
+   return _pos_map_sin((M_PI / 2.0) + (p2 * len)) * decay;
 }
 
 /**
@@ -296,13 +308,13 @@ ecore_animator_pos_map(double pos, Ecore_Pos_Map map, double v1, double v2)
       case ECORE_POS_MAP_LINEAR:
         return pos;
       case ECORE_POS_MAP_ACCELERATE:
-        pos = 1.0 - sin((M_PI / 2.0) + ((pos * M_PI) / 2.0));
+        pos = 1.0 - _pos_map_sin((M_PI / 2.0) + ((pos * M_PI) / 2.0));
         return pos;
       case ECORE_POS_MAP_DECELERATE:
-        pos = sin((pos * M_PI) / 2.0);
+        pos = _pos_map_sin((pos * M_PI) / 2.0);
         return pos;
       case ECORE_POS_MAP_SINUSOIDAL:
-        pos = (1.0 - cos(pos * M_PI)) / 2.0;
+        pos = (1.0 - _pos_map_cos(pos * M_PI)) / 2.0;
         return pos;
       case ECORE_POS_MAP_ACCELERATE_FACTOR:
         pos = _pos_map_accel_factor(pos, v1);