cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=f259ff8d4cf30ce2c23137702af04e123c599f99

commit f259ff8d4cf30ce2c23137702af04e123c599f99
Author: perepelits.m <perepelit...@samsung.com>
Date:   Thu Jun 25 16:22:00 2015 +0200

    evas: fix shooter example
    
    Summary: Disable atlas flag for all objects, fix motion algorithm, add 
primitives.
    
    Reviewers: Hermet, raster, cedric
    
    Subscribers: cedric, artem.popov
    
    Differential Revision: https://phab.enlightenment.org/D2693
    
    Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/examples/evas/shooter/evas-3d-shooter-header.h |   2 +
 src/examples/evas/shooter/evas-3d-shooter-macros.h | 129 ++++----
 src/examples/evas/shooter/evas-3d-shooter.c        | 333 +++++----------------
 3 files changed, 150 insertions(+), 314 deletions(-)

diff --git a/src/examples/evas/shooter/evas-3d-shooter-header.h 
b/src/examples/evas/shooter/evas-3d-shooter-header.h
index 235c85b..de70da7 100644
--- a/src/examples/evas/shooter/evas-3d-shooter-header.h
+++ b/src/examples/evas/shooter/evas-3d-shooter-header.h
@@ -21,6 +21,8 @@
 
 typedef struct _Scene_Data
 {
+   Eo      *cube_primitive;
+   Eo      *sphere_primitive;
    Eo      *cylinder_primitive;
    Eo      *texture_diffuse_eagle;
    Eo      *texture_diffuse_world;
diff --git a/src/examples/evas/shooter/evas-3d-shooter-macros.h 
b/src/examples/evas/shooter/evas-3d-shooter-macros.h
index 2eb3282..bf3964a 100644
--- a/src/examples/evas/shooter/evas-3d-shooter-macros.h
+++ b/src/examples/evas/shooter/evas-3d-shooter-macros.h
@@ -62,10 +62,50 @@ typedef struct _vec2
     float   y;
 } vec2;
 
-#define KEY_MOTION(lateral, camera)               \
-   {                                              \
-      lateral_motion_indicator = lateral;         \
-      camera_move = camera;                       \
+#define KEY_MOTION(way)                                      \
+   {                                                         \
+      for (i = 0; (motion_vec[i] > 0) && (!pressed); i++)    \
+        pressed = (motion_vec[i] == way);                    \
+                                                             \
+      if (!pressed)                                          \
+        motion_vec[i] = way;                                 \
+                                                             \
+      if ((way == 1) || (way == 3))                          \
+        camera_move = CAMERA_MOVE;                           \
+      else                                                   \
+        camera_move = -CAMERA_MOVE;                          \
+                                                             \
+      if (way < 3)                                           \
+        lateral_motion_indicator = 0;                        \
+      else                                                   \
+        lateral_motion_indicator = 1;                        \
+   }
+
+#define KEY_MOTION_DOWN(way)                                         \
+   {                                                                 \
+      while ((motion_vec[i] != way) && (i < 4))                      \
+        i++;                                                         \
+      for (j = i; j < 3; j++)                                        \
+        motion_vec[j] = motion_vec[j + 1];                           \
+      motion_vec[3] = 0;                                             \
+                                                                     \
+      i = 0;                                                         \
+      while (motion_vec[i] > 0)                                      \
+        i++;                                                         \
+      if (i > 0)                                                     \
+        {                                                            \
+           if ((motion_vec[i - 1] == 1) || (motion_vec[i - 1] == 3)) \
+             camera_move = CAMERA_MOVE;                              \
+           else                                                      \
+             camera_move = -CAMERA_MOVE;                             \
+                                                                     \
+           if (motion_vec[i-1] < 3)                                  \
+             lateral_motion_indicator = 0;                           \
+           else                                                      \
+             lateral_motion_indicator = 1;                           \
+        }                                                            \
+      else                                                           \
+        camera_move = 0;                                             \
    }
 
 
@@ -86,7 +126,7 @@ typedef struct _vec2
    eo_do(mesh, 
evas_canvas3d_mesh_shade_mode_set(EVAS_CANVAS3D_SHADE_MODE_PHONG));
 
 
-#define SETUP_MESH(Object, Name, a, d, s)                                      
           \
+#define ADD_MESH(Object, Name, a, d, s)                                        
           \
    data->material_##Object = eo_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas);       
                 \
                                                                                
           \
    eo_do(data->material_##Object,                                              
           \
@@ -99,11 +139,11 @@ typedef struct _vec2
          evas_canvas3d_material_color_set(EVAS_CANVAS3D_MATERIAL_SPECULAR, s, 
s, s, 1.0),             \
          evas_canvas3d_material_shininess_set(50.0));                          
                 \
                                                                                
           \
-   data->mesh_##Name = eo_add(EVAS_CANVAS3D_MESH_CLASS, evas);                 
                 \
-                                                                               
           \
+   data->mesh_##Name = eo_add(EVAS_CANVAS3D_MESH_CLASS, evas);
+
+#define SETUP_DEFAULT_MESH(Object, Name, Shade_Mode)                           
           \
    eo_do(data->mesh_##Name,                                                    
           \
-         evas_canvas3d_mesh_frame_add(0),                                      
                 \
-         evas_canvas3d_mesh_shade_mode_set(EVAS_CANVAS3D_SHADE_MODE_DIFFUSE),  
                       \
+         
evas_canvas3d_mesh_shade_mode_set(EVAS_CANVAS3D_SHADE_MODE_##Shade_Mode),       
             \
          
evas_canvas3d_mesh_vertex_assembly_set(EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES),
             \
          evas_canvas3d_mesh_frame_material_set(0, data->material_##Object));
 
@@ -118,13 +158,13 @@ typedef struct _vec2
 
 #define MATERIAL_TEXTURE_SET(Object, Name, file, image)                        
           \
    eo_do(data->mesh_##Name,                                                    
           \
-         efl_file_set(file, NULL),                                             
           \
-         evas_canvas3d_mesh_shade_mode_set(EVAS_CANVAS3D_SHADE_MODE_PHONG),    
                       \
-         evas_canvas3d_mesh_frame_material_set(0, data->material_##Object));   
                 \
+         efl_file_set(file, NULL));                                            
           \
                                                                                
           \
+   SETUP_DEFAULT_MESH(Object, Name, PHONG)                                     
           \
    data->texture_diffuse_##Object = eo_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas); 
                 \
                                                                                
           \
    eo_do(data->texture_diffuse_##Object,                                       
           \
+         evas_canvas3d_texture_atlas_enable_set(EINA_FALSE),                   
                 \
          evas_canvas3d_texture_file_set(image, NULL),                          
                 \
          
evas_canvas3d_texture_filter_set(EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST,          
             \
                                     EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST),     
                 \
@@ -137,31 +177,17 @@ typedef struct _vec2
                                       data->texture_diffuse_##Object));
 
 
-#define CUBE_TEXTURE_SET(Object, Name, v_count, vertex1, vertex2, i_count, 
index, image)        \
-   int textcoords_count = 12;                                                  
                 \
-   int pos_count = 12;                                                         
                 \
-   if (&vertex1[10] != vertex2)                                                
                 \
-     {                                                                         
                 \
-        textcoords_count =2;                                                   
                 \
-        pos_count = 10;                                                        
                 \
-     }                                                                         
                 \
+#define CUBE_TEXTURE_SET(Object, Name, vertex, image)                          
                 \
    eo_do(data->mesh_##Name,                                                    
                 \
-         evas_canvas3d_mesh_vertex_count_set(v_count),                         
                       \
-         evas_canvas3d_mesh_frame_vertex_data_set(0, 
EVAS_CANVAS3D_VERTEX_POSITION,                         \
-                                            pos_count * sizeof(float), 
&vertex1[ 0]),           \
-         evas_canvas3d_mesh_frame_vertex_data_set(0, 
EVAS_CANVAS3D_VERTEX_NORMAL,                           \
-                                            pos_count * sizeof(float), 
&vertex1[ 3]),           \
-         evas_canvas3d_mesh_frame_vertex_data_set(0, 
EVAS_CANVAS3D_VERTEX_COLOR,                            \
-                                            pos_count * sizeof(float), 
&vertex1[ 6]),           \
+         evas_canvas3d_mesh_from_primitive_set(0, data->cube_primitive),       
                       \
          evas_canvas3d_mesh_frame_vertex_data_set(0, 
EVAS_CANVAS3D_VERTEX_TEXCOORD,                         \
-                                            textcoords_count * sizeof(float), 
vertex2),         \
-         
evas_canvas3d_mesh_index_data_set(EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT,    
                   \
-                                     i_count, &index[0]),                      
                 \
-         
evas_canvas3d_mesh_shade_mode_set(EVAS_CANVAS3D_SHADE_MODE_NORMAL_MAP));        
                   \
+                                            2 * sizeof(float), vertex));       
                 \
                                                                                
                 \
+   SETUP_DEFAULT_MESH(Object, Name, NORMAL_MAP)                                
                 \
    data->texture_diffuse_##Object = eo_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas); 
                       \
                                                                                
                 \
    eo_do(data->texture_diffuse_##Object,                                       
                 \
+         evas_canvas3d_texture_atlas_enable_set(EINA_FALSE),                   
                       \
          evas_canvas3d_texture_file_set(image, NULL),                          
                       \
          
evas_canvas3d_texture_filter_set(EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST,          
                   \
                                     EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST),     
                       \
@@ -178,6 +204,7 @@ typedef struct _vec2
    data->texture_normal_##Object = eo_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas);  
                 \
                                                                                
           \
    eo_do(data->texture_normal_##Object,                                        
           \
+         evas_canvas3d_texture_atlas_enable_set(EINA_FALSE),                   
                 \
          evas_canvas3d_texture_file_set(normal, NULL),                         
                 \
          
evas_canvas3d_texture_filter_set(EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST,          
             \
                                     EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST),     
                 \
@@ -190,59 +217,43 @@ typedef struct _vec2
    eo_do(data->mesh_##Name,                                                    
           \
          
evas_canvas3d_mesh_shade_mode_set(EVAS_CANVAS3D_SHADE_MODE_NORMAL_MAP));
 
-#define SPHERE_SET(Name)                                                       
            \
-   eo_do(data->mesh_##Name,                                                    
            \
-         evas_canvas3d_mesh_vertex_count_set(vertex_count),                    
                  \
-         evas_canvas3d_mesh_frame_vertex_data_set(0, 
EVAS_CANVAS3D_VERTEX_POSITION,                    \
-                                            sizeof(vertex), 
&vertices[0].position),        \
-         evas_canvas3d_mesh_frame_vertex_data_set(0, 
EVAS_CANVAS3D_VERTEX_NORMAL,                      \
-                                            sizeof(vertex), 
&vertices[0].normal),          \
-         evas_canvas3d_mesh_frame_vertex_data_set(0, 
EVAS_CANVAS3D_VERTEX_TANGENT,                     \
-                                            sizeof(vertex), 
&vertices[0].tangent),         \
-         evas_canvas3d_mesh_frame_vertex_data_set(0, 
EVAS_CANVAS3D_VERTEX_COLOR,                       \
-                                            sizeof(vertex), 
&vertices[0].color);           \
-         evas_canvas3d_mesh_frame_vertex_data_set(0, 
EVAS_CANVAS3D_VERTEX_TEXCOORD,                    \
-                                            sizeof(vertex), 
&vertices[0].texcoord),        \
-         
evas_canvas3d_mesh_index_data_set(EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT,    
              \
-                                     index_count, &indices[0]));
-
 #define TEXTCOORDS_SET(Name, fb1, fb2, lr1, lr2, tb1, tb2)                     
 \
    static float  Name##_textcoords[] =                                         
 \
    {                                                                           
 \
    /* Front */                                                                 
 \
    0.0,  0.0,                                                                  
 \
    fb1,  0.0,                                                                  
 \
-   0.0,  fb2,                                                                  
 \
    fb1,  fb2,                                                                  
 \
-                                                                               
 \
-   /* Back */                                                                  
 \
    0.0,  fb2,                                                                  
 \
-   fb1,  fb2,                                                                  
 \
-   0.0,  0.0,                                                                  
 \
-   fb1,  0.0,                                                                  
 \
                                                                                
 \
    /* Left */                                                                  
 \
-   0.0,  lr2,                                                                  
 \
+   lr1,  0.0,                                                                  
 \
    lr1,  lr2,                                                                  
 \
+   0.0,  lr2,                                                                  
 \
    0.0,  0.0,                                                                  
 \
-   lr1,  0.0,                                                                  
 \
+                                                                               
 \
+   /* Back */                                                                  
 \
+   0.0,  0.0,                                                                  
 \
+   fb1,  0.0,                                                                  
 \
+   fb1,  fb2,                                                                  
 \
+   0.0,  fb2,                                                                  
 \
                                                                                
 \
    /* Right */                                                                 
 \
    0.0,  lr2,                                                                  
 \
-   lr1,  lr2,                                                                  
 \
    0.0,  0.0,                                                                  
 \
    lr1,  0.0,                                                                  
 \
+   lr1,  lr2,                                                                  
 \
                                                                                
 \
    /* Top */                                                                   
 \
+   0.0,  0.0,                                                                  
 \
    0.0,  tb2,                                                                  
 \
    tb1,  tb2,                                                                  
 \
-   0.0,  0.0,                                                                  
 \
    tb1,  0.0,                                                                  
 \
                                                                                
 \
    /* Bottom */                                                                
 \
-   0.0,  tb2,                                                                  
 \
+   tb1,  0.0,                                                                  
 \
    tb1,  tb2,                                                                  
 \
+   0.0,  tb2,                                                                  
 \
    0.0,  0.0,                                                                  
 \
-   tb1,  0.0,                                                                  
 \
    };
 
diff --git a/src/examples/evas/shooter/evas-3d-shooter.c 
b/src/examples/evas/shooter/evas-3d-shooter.c
index 055407a..c83ab0d 100644
--- a/src/examples/evas/shooter/evas-3d-shooter.c
+++ b/src/examples/evas/shooter/evas-3d-shooter.c
@@ -44,6 +44,7 @@ int              lateral_motion_indicator   = 0;
 int              step_indicator     = 0;
 int              fall_indicator     = 0;
 int              aabb_index         = 0;
+int              motion_vec[4];
 
 typedef struct _Ecore_Timers
 {
@@ -51,56 +52,6 @@ typedef struct _Ecore_Timers
    void *data;
 } Timers;
 
-static float cube_vertices[] =
-{
-   /* Front */
-   -1.0,  1.0,  1.0,     0.0,  0.0,  1.0,     1.0, 0.0, 0.0, 1.0,
-    1.0,  1.0,  1.0,     0.0,  0.0,  1.0,     1.0, 0.0, 0.0, 1.0,
-   -1.0, -1.0,  1.0,     0.0,  0.0,  1.0,     1.0, 0.0, 0.0, 1.0,
-    1.0, -1.0,  1.0,     0.0,  0.0,  1.0,     1.0, 0.0, 0.0, 1.0,
-
-   /* Back */
-    1.0,  1.0, -1.0,     0.0,  0.0, -1.0,     0.0, 0.0, 1.0, 1.0,
-   -1.0,  1.0, -1.0,     0.0,  0.0, -1.0,     0.0, 0.0, 1.0, 1.0,
-    1.0, -1.0, -1.0,     0.0,  0.0, -1.0,     0.0, 0.0, 1.0, 1.0,
-   -1.0, -1.0, -1.0,     0.0,  0.0, -1.0,     0.0, 0.0, 1.0, 1.0,
-
-   /* Left */
-   -1.0,  1.0, -1.0,    -1.0,  0.0,  0.0,     0.0, 1.0, 0.0, 1.0,
-   -1.0,  1.0,  1.0,    -1.0,  0.0,  0.0,     0.0, 1.0, 0.0, 1.0,
-   -1.0, -1.0, -1.0,    -1.0,  0.0,  0.0,     0.0, 1.0, 0.0, 1.0,
-   -1.0, -1.0,  1.0,    -1.0,  0.0,  0.0,     0.0, 1.0, 0.0, 1.0,
-
-   /* Right */
-    1.0,  1.0,  1.0,     1.0,  0.0,  0.0,     1.0, 1.0, 0.0, 1.0,
-    1.0,  1.0, -1.0,     1.0,  0.0,  0.0,     1.0, 1.0, 0.0, 1.0,
-    1.0, -1.0,  1.0,     1.0,  0.0,  0.0,     1.0, 1.0, 0.0, 1.0,
-    1.0, -1.0, -1.0,     1.0,  0.0,  0.0,     1.0, 1.0, 0.0, 1.0,
-
-   /* Top */
-   -1.0,  1.0, -1.0,     0.0,  1.0,  0.0,     1.0, 0.0, 1.0, 1.0,
-    1.0,  1.0, -1.0,     0.0,  1.0,  0.0,     1.0, 0.0, 1.0, 1.0,
-   -1.0,  1.0,  1.0,     0.0,  1.0,  0.0,     1.0, 0.0, 1.0, 1.0,
-    1.0,  1.0,  1.0,     0.0,  1.0,  0.0,     1.0, 0.0, 1.0, 1.0,
-
-   /* Bottom */
-    1.0, -1.0, -1.0,     0.0, -1.0,  0.0,     0.0, 1.0, 1.0, 1.0,
-   -1.0, -1.0, -1.0,     0.0, -1.0,  0.0,     0.0, 1.0, 1.0, 1.0,
-    1.0, -1.0,  1.0,     0.0, -1.0,  0.0,     0.0, 1.0, 1.0, 1.0,
-   -1.0, -1.0,  1.0,     0.0, -1.0,  0.0,     0.0, 1.0, 1.0, 1.0,
-};
-
-static float grass_vertices[] =
-{
-   /* Top */
-   -6.5,  0.0, -4.0,     0.0,  1.0,  0.0,     1.0, 0.0, 1.0, 1.0,     0.0,  
4.0,
-    6.5,  0.0, -4.0,     0.0,  1.0,  0.0,     1.0, 0.0, 1.0, 1.0,     4.0,  
4.0,
-   -6.5,  0.0,  4.0,     0.0,  1.0,  0.0,     1.0, 0.0, 1.0, 1.0,     0.0,  
0.0,
-    6.5,  0.0,  4.0,     0.0,  1.0,  0.0,     1.0, 0.0, 1.0, 1.0,     4.0,  
0.0,
-
-};
-
-
 static const unsigned short cube_indices[] =
 {
    /* Front */
@@ -122,12 +73,6 @@ static const unsigned short cube_indices[] =
    20, 21, 22, 22, 21, 23
 };
 
-static const unsigned short grass_indices[] =
-{
-   /* Top */
-   0,   1,  2,  2,  1,  3
-};
-
 static int              vertex_count = 0;
 static vertex           *vertices = NULL;
 
@@ -143,6 +88,7 @@ _key_down(void *data,
    Evas_Event_Key_Down *ev = event_info;
    Evas_Real x, y, z;
    Scene_Data *scene = (Scene_Data *)data;
+   Eina_Bool pressed = EINA_FALSE;
    int i = 0;
    if (!strcmp(ev->key, "space"))
      {
@@ -155,13 +101,13 @@ _key_down(void *data,
           }
      }
    else if (!strcmp(ev->key, "s"))
-     KEY_MOTION(0, CAMERA_MOVE)
+     KEY_MOTION(1)
    else if (!strcmp(ev->key, "w"))
-     KEY_MOTION(0, -CAMERA_MOVE)
+     KEY_MOTION(2)
    else if (!strcmp(ev->key, "d"))
-     KEY_MOTION(1, CAMERA_MOVE)
+     KEY_MOTION(3)
    else if (!strcmp(ev->key, "a"))
-     KEY_MOTION(1, -CAMERA_MOVE)
+     KEY_MOTION(4)
    else if (!strcmp(ev->key, "B"))
      {
         if (!scene->blending)
@@ -308,12 +254,19 @@ _key_up(void *data EINA_UNUSED,
         void *event_info)
 {
    Evas_Event_Key_Down *ev = event_info;
+   int i = 0, j;
 
    if (!strcmp(ev->key, "space"))
      space_move = 0;
-   else if ((!strcmp(ev->key, "s")) || (!strcmp(ev->key, "w")) ||
-       (!strcmp(ev->key, "d")) || (!strcmp(ev->key, "a")))
-      camera_move = 0;
+   else if (!strcmp(ev->key, "s"))
+     KEY_MOTION_DOWN(1)
+   else if (!strcmp(ev->key, "w"))
+     KEY_MOTION_DOWN(2)
+   else if (!strcmp(ev->key, "d"))
+     KEY_MOTION_DOWN(3)
+   else if (!strcmp(ev->key, "a"))
+     KEY_MOTION_DOWN(4)
+
 }
 
 /* animate camera, create artificial intelligence  of warrior */
@@ -561,7 +514,7 @@ _animate_scene_gun(void *data)
           _scale(scene->mesh_node_rocket[i], 0.004);
         else if (rocket_indicator[i] == 1)
           {
-             _scale(scene->mesh_node_rocket[i], 0.2);
+             _scale(scene->mesh_node_rocket[i], 0.4);
              eo_do(scene->material_rocket[i],
                    
evas_canvas3d_material_color_set(EVAS_CANVAS3D_MATERIAL_AMBIENT, 0.8, 0.8, 0.8, 
1.0),
                    
evas_canvas3d_material_color_set(EVAS_CANVAS3D_MATERIAL_DIFFUSE, 0.2, 0.2, 0.0, 
1.0),
@@ -606,7 +559,7 @@ _animate_scene_gun(void *data)
                         
evas_canvas3d_material_color_set(EVAS_CANVAS3D_MATERIAL_DIFFUSE, 0.9, 0.1, 0.1, 
1.0),
                         
evas_canvas3d_material_color_set(EVAS_CANVAS3D_MATERIAL_SPECULAR, 0.5, 0.5, 
0.5, 1.0));
 
-                  _scale(scene->mesh_node_rocket[i], 2.3);
+                  _scale(scene->mesh_node_rocket[i], 4.5);
                   rocket_indicator[i] = 3;
                }
           }
@@ -793,170 +746,23 @@ _play_scene(void *data EINA_UNUSED,
 }
 
 void
-_world_init(int precision)
-{
-   int              i, j;
-   unsigned short   *index;
-   double           lati, y , r, longi;
-   vec3             e1, e2;
-   float            du1, du2, dv1, dv2, f;
-   vec3             tangent;
-
-   vertex_count = (precision + 1) * (precision + 1);
-   index_count = precision * precision * 6;
-
-   /* Allocate buffer. */
-   vertices = malloc(sizeof(vertex) * vertex_count);
-   indices = malloc(sizeof(unsigned short) * index_count);
-
-   for (i = 0; i <= precision; i++)
-     {
-        lati = (M_PI * (double)i) / (double)precision;
-        y = cos(lati);
-        r = fabs(sin(lati));
-
-        for (j = 0; j <= precision; j++)
-          {
-             longi = (M_PI * 2.0 * j) / precision;
-             vertex *v = &vertices[i * (precision  + 1) + j];
-
-             if (j == 0 || j == precision)
-               v->position.x = 0.0;
-             else
-               v->position.x = r * sin(longi);
-
-             v->position.y = y;
-
-             if (j == 0 || j == precision)
-               v->position.z = r;
-             else
-               v->position.z = r * cos(longi);
-
-             v->normal = v->position;
-
-             if (v->position.x > 0.0)
-               {
-                  v->tangent.x = -v->normal.y;
-                  v->tangent.y =  v->normal.x;
-                  v->tangent.z =  v->normal.z;
-               }
-             else
-               {
-                  v->tangent.x =  v->normal.y;
-                  v->tangent.y = -v->normal.x;
-                  v->tangent.z =  v->normal.z;
-               }
-
-             v->color.x = v->position.x;
-             v->color.y = v->position.y;
-             v->color.z = v->position.z;
-             v->color.w = 1.0;
-
-             if (j == precision)
-               v->texcoord.x = 1.0;
-             else if (j == 0)
-               v->texcoord.x = 0.0;
-             else
-               v->texcoord.x = (double)j / (double)precision;
-
-             if (i == precision)
-               v->texcoord.y = 1.0;
-             else if (i == 0)
-               v->texcoord.y = 0.0;
-             else
-               v->texcoord.y = 1.0 - (double)i / (double)precision;
-          }
-     }
-
-     index = &indices[0];
-
-     for (i = 0; i < precision; i++)
-       {
-          for (j = 0; j < precision; j++)
-            {
-               *index++ = i * (precision + 1) + j;
-               *index++ = i * (precision + 1) + j + 1;
-               *index++ = (i + 1) * (precision + 1) + j;
-
-               *index++ = (i + 1) * (precision + 1) + j;
-               *index++ = i * (precision + 1) + j + 1;
-               *index++ = (i + 1) * (precision + 1) + j + 1;
-            }
-       }
-
-     for (i = 0; i < index_count; i += 3)
-       {
-          vertex *v0 = &vertices[indices[i + 0]];
-          vertex *v1 = &vertices[indices[i + 1]];
-          vertex *v2 = &vertices[indices[i + 2]];
-
-          e1.x = v1->position.x - v0->position.x;
-          e1.y = v1->position.y - v0->position.y;
-          e1.z = v1->position.z - v0->position.z;
-
-          e2.x = v2->position.x - v0->position.x;
-          e2.y = v2->position.y - v0->position.y;
-          e2.z = v2->position.z - v0->position.z;
-
-          du1 = v1->texcoord.x - v0->texcoord.x;
-          dv1 = v1->texcoord.y - v0->texcoord.y;
-
-          du2 = v2->texcoord.x - v0->texcoord.x;
-          dv2 = v2->texcoord.y - v0->texcoord.y;
-
-          f = 1.0 / (du1 * dv2 - du2 * dv1);
-
-          tangent.x = f * (dv2 * e1.x - dv1 * e2.x);
-          tangent.y = f * (dv2 * e1.y - dv1 * e2.y);
-          tangent.z = f * (dv2 * e1.z - dv1 * e2.z);
-
-          v0->tangent = tangent;
-       }
-
-     for (i = 0; i <= precision; i++)
-       {
-          for (j = 0; j <= precision; j++)
-            {
-               if (j == precision)
-                 {
-                    vertex *v = &vertices[i * (precision  + 1) + j];
-                    v->tangent = vertices[i * (precision + 1)].tangent;
-                 }
-            }
-       }
-}
-
-void
 _mesh_setup_gun_planet(Scene_Data *data)
 {
-   _world_init(20);
-
    /* Setup material and texture for world. */
 
-   SETUP_MESH(world, world, 0.5, 0.5, 1.0);
-   SETUP_MESH_NODE(world);
-
+   ADD_MESH(world, world, 0.5, 0.5, 1.0);
    eo_do(data->mesh_world,
-         evas_canvas3d_mesh_vertex_count_set(vertex_count),
-         evas_canvas3d_mesh_frame_vertex_data_set(0, 
EVAS_CANVAS3D_VERTEX_POSITION,
-                                            sizeof(vertex), 
&vertices[0].position),
-         evas_canvas3d_mesh_frame_vertex_data_set(0, 
EVAS_CANVAS3D_VERTEX_NORMAL,
-                                            sizeof(vertex), 
&vertices[0].normal),
-         evas_canvas3d_mesh_frame_vertex_data_set(0, 
EVAS_CANVAS3D_VERTEX_TANGENT,
-                                            sizeof(vertex), 
&vertices[0].tangent),
-         evas_canvas3d_mesh_frame_vertex_data_set(0, 
EVAS_CANVAS3D_VERTEX_COLOR,
-                                            sizeof(vertex), 
&vertices[0].color);
-         evas_canvas3d_mesh_frame_vertex_data_set(0, 
EVAS_CANVAS3D_VERTEX_TEXCOORD,
-                                            sizeof(vertex), 
&vertices[0].texcoord),
-         
evas_canvas3d_mesh_index_data_set(EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, 
index_count, &indices[0]));
+         evas_canvas3d_mesh_from_primitive_set(0, data->sphere_primitive));
+   SETUP_DEFAULT_MESH(world, world, DIFFUSE);
+   SETUP_MESH_NODE(world);
 
    eo_do(data->mesh_node_world,
-         evas_canvas3d_node_scale_set(150, 150, 150),
+         evas_canvas3d_node_scale_set(350, 350, 350),
          evas_canvas3d_node_position_set(0.0, 0.0, 0.0));
 
    /* Setup material and texture for player */
 
-   SETUP_MESH(soldier, soldier, 0.2, 0.6, 1.0)
+   ADD_MESH(soldier, soldier, 0.2, 0.6, 1.0)
    MATERIAL_TEXTURE_SET(soldier, soldier, soldier_path, soldier_tex_path)
 
    SETUP_MESH_NODE(soldier)
@@ -970,12 +776,12 @@ _mesh_setup_gun_planet(Scene_Data *data)
                                   0, 1, 0),
          evas_canvas3d_node_mesh_frame_set(data->mesh_soldier, 0));
 
-   SETUP_MESH(soldier, soldier_jump, 1.0, 1.0, 1.0)
+   ADD_MESH(soldier, soldier_jump, 1.0, 1.0, 1.0)
    MATERIAL_TEXTURE_SET(soldier, soldier_jump, soldier_jump_path, 
soldier_tex_path)
 
    /* Setup material and texture for tommy gun */
 
-   SETUP_MESH(tommy, tommy, 0.0, 0.3, 1.0)
+   ADD_MESH(tommy, tommy, 0.0, 0.3, 1.0)
    SETUP_MESH_NODE(tommy)
    eo_do(data->mesh_tommy,
          efl_file_set(gun_path, NULL),
@@ -991,7 +797,7 @@ _mesh_setup_gun_planet(Scene_Data *data)
 
    /* Setup material and texture for gazebo */
 
-   SETUP_MESH(gazebo, gazebo, 0.01, 1.0, 1.0)
+   ADD_MESH(gazebo, gazebo, 0.01, 1.0, 1.0)
    SETUP_MESH_NODE(gazebo)
    MATERIAL_TEXTURE_SET(gazebo, gazebo, gazebo_bot_path, gazebo_b_path)
    NORMAL_SET(gazebo, gazebo, gazebo_b_n_path)
@@ -1003,7 +809,7 @@ _mesh_setup_gun_planet(Scene_Data *data)
 
    /* Setup material and texture for carpet */
 
-   SETUP_MESH(carpet, carpet, 0.01, 1.0, 1.0)
+   ADD_MESH(carpet, carpet, 0.01, 1.0, 1.0)
    SETUP_MESH_NODE(carpet)
    MATERIAL_TEXTURE_SET(carpet, carpet, gazebo_top_path, gazebo_t_path)
    NORMAL_SET(carpet, carpet, gazebo_t_n_path)
@@ -1011,6 +817,7 @@ _mesh_setup_gun_planet(Scene_Data *data)
    if (data->blending)
      {
         eo_do(data->texture_diffuse_carpet,
+              evas_canvas3d_texture_atlas_enable_set(EINA_FALSE),
               evas_canvas3d_texture_file_set(gazebo_t_trans_path, NULL));
         eo_do(data->mesh_carpet,
               evas_canvas3d_mesh_blending_enable_set(EINA_TRUE),
@@ -1022,7 +829,7 @@ _mesh_setup_gun_planet(Scene_Data *data)
          evas_canvas3d_node_position_set(-20, -10, -35));
    /* Setup material and texture for eagle. */
 
-   SETUP_MESH(eagle, eagle, 0.01, 1.0, 1.0)
+   ADD_MESH(eagle, eagle, 0.01, 1.0, 1.0)
    SETUP_MESH_NODE(eagle)
    MATERIAL_TEXTURE_SET(eagle, eagle, eagle_path, eagle_tex_path)
 
@@ -1031,7 +838,9 @@ _mesh_setup_gun_planet(Scene_Data *data)
          evas_canvas3d_node_position_set(-20, 20, 0));
    /* Set material for bounding box */
 
-   SETUP_MESH(cube, cube, 0.01, 1.0, 1.0)
+   ADD_MESH(cube, cube, 0.01, 1.0, 1.0)
+   eo_do(data->mesh_cube, evas_canvas3d_mesh_frame_add(0));
+   SETUP_DEFAULT_MESH(cube, cube, DIFFUSE);
    SETUP_MESH_NODE(cube)
 
    eo_do(data->mesh_cube,
@@ -1042,15 +851,15 @@ _mesh_setup_gun_planet(Scene_Data *data)
 
    /* Setup mesh for column carpet */
 
-   SETUP_MESH(column_c, column_c, 0.2, 0.8, 1.0)
+   ADD_MESH(column_c, column_c, 0.2, 0.8, 1.0)
    SETUP_MESH_NODE(column_c)
-   TEXTCOORDS_SET(cube, 5.0, 0.1, 5.0, 0.1, 5.0, 0.4)
-   CUBE_TEXTURE_SET(column_c, column_c, 24, cube_vertices, cube_textcoords, 
36, cube_indices, red_brick_path)
+   TEXTCOORDS_SET(cube, 5.0, 0.4, 5.0, 0.1, 5.0, 0.1)
+   CUBE_TEXTURE_SET(column_c, column_c, cube_textcoords, red_brick_path)
    NORMAL_SET(column_c, column_c, red_brick_n_path)
 
    eo_do(data->mesh_node_column_c,
          evas_canvas3d_node_orientation_angle_axis_set(90, 0, 1.0, 0.0),
-         evas_canvas3d_node_scale_set(48.0, 0.8 , 2.4 ),
+         evas_canvas3d_node_scale_set(96.0, 1.6 , 4.8 ),
          evas_canvas3d_node_position_set(10 , 9.0, -12));
 
    /* Setup mesh for bounding sphere */
@@ -1083,32 +892,32 @@ _mesh_setup_wall(Scene_Data *data, int index)
 {
    /* Setup material and texture for wall. */
 
-   SETUP_MESH(wall, wall[index], 0.2, 0.8, 1.0)
+   ADD_MESH(wall, wall[index], 0.2, 0.8, 1.0)
    SETUP_MESH_NODE(wall[index])
-   TEXTCOORDS_SET(wall, 12.0, 1.0, 0.2, 1.0, 12.0, 0.2)
-   CUBE_TEXTURE_SET(wall, wall[index], 24, cube_vertices, wall_textcoords, 36, 
cube_indices, red_brick_path)
+   TEXTCOORDS_SET(wall, 12.0, 0.2, 0.2, 1.0, 12.0, 1.0)
+   CUBE_TEXTURE_SET(wall, wall[index], wall_textcoords, red_brick_path)
    NORMAL_SET(wall, wall[index], red_brick_n_path)
 
    /* placing of wall carpet on the floor grid */
    if (index == 0)
      eo_do(data->mesh_node_wall[index],
-           evas_canvas3d_node_scale_set(6.7 * 9.75, 10.0 , 1.0 ),
+           evas_canvas3d_node_scale_set(6.7 * 19.5, 20.0, 2.0),
            evas_canvas3d_node_position_set(-39.7 + 18.6 * 3, 0.0, -60.3));
    else if (index == 1)
      {
         eo_do(data->mesh_node_wall[index],
-              evas_canvas3d_node_scale_set(5 * 9.75, 10.0 , 1.0 ),
+              evas_canvas3d_node_scale_set(5 * 19.5, 20.0, 2.0),
               evas_canvas3d_node_position_set(81.2, 0.0, -51.5 + 19.5 * 2),
               evas_canvas3d_node_orientation_angle_axis_set(90, 0, 1.0, 0.0));
      }
    else if (index == 2)
      eo_do(data->mesh_node_wall[index],
-           evas_canvas3d_node_scale_set(6.7 * 9.75, 10.0 , 1.0 ),
+           evas_canvas3d_node_scale_set(6.7 * 19.5, 20.0, 2.0),
            evas_canvas3d_node_position_set(-39.7 + 18.6*3, 0.0, 35.3));
    else if (index == 3)
      {
         eo_do(data->mesh_node_wall[index],
-              evas_canvas3d_node_scale_set(5* 9.75, 10.0 , 1.0 ),
+              evas_canvas3d_node_scale_set(5* 19.5, 20.0, 2.0),
               evas_canvas3d_node_position_set(-48.4, 0.0, -51.5 + 19.5 * 2),
               evas_canvas3d_node_orientation_angle_axis_set(90, 0, 1.0, 0.0));
      }
@@ -1139,7 +948,6 @@ _mesh_setup_column(Scene_Data *data, int index)
          evas_canvas3d_mesh_from_primitive_set(0, data->cylinder_primitive),
          evas_canvas3d_mesh_shade_mode_set(EVAS_CANVAS3D_SHADE_MODE_DIFFUSE),
          
evas_canvas3d_mesh_vertex_assembly_set(EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES),
-         evas_canvas3d_mesh_frame_material_set(0, data->material_column),
          evas_canvas3d_mesh_shade_mode_set(EVAS_CANVAS3D_SHADE_MODE_PHONG),
          evas_canvas3d_mesh_frame_material_set(0, data->material_column));
 
@@ -1147,6 +955,7 @@ _mesh_setup_column(Scene_Data *data, int index)
 
    eo_do(data->texture_diffuse_column,
          evas_canvas3d_texture_file_set(red_brick_path, NULL),
+   evas_canvas3d_texture_atlas_enable_set(EINA_FALSE),
          evas_canvas3d_texture_filter_set(EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST,
                                     EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST),
          evas_canvas3d_texture_wrap_set(EVAS_CANVAS3D_WRAP_MODE_REPEAT, 
EVAS_CANVAS3D_WRAP_MODE_REPEAT));
@@ -1170,16 +979,16 @@ _mesh_setup_grass(Scene_Data *data)
 {
    /* Setup material and texture for grass. */
 
-   SETUP_MESH(grass, grass, 0.4, 0.8, 1.0)
+   ADD_MESH(grass, grass, 0.4, 0.8, 1.0)
    SETUP_MESH_NODE(grass)
-   CUBE_TEXTURE_SET(grass, grass, 4, grass_vertices, &grass_vertices[10],
-                         6, grass_indices, gray_brick_path)
+   TEXTCOORDS_SET(grass, 6.0, 3.0, 1.0, 1.0, 1.0, 1.0)
+   CUBE_TEXTURE_SET(grass, grass, grass_textcoords, gray_brick_path)
    NORMAL_SET(grass, grass, gray_brick_n_path)
 
    /* placing of grass carpet on the floor grid */
    eo_do(data->mesh_node_grass,
-         evas_canvas3d_node_scale_set(10.0, 1.0, 12.0),
-         evas_canvas3d_node_position_set(16, -10.0, -12));
+         evas_canvas3d_node_scale_set(130.0, 1.0, 96.0),
+         evas_canvas3d_node_position_set(16.5, -10.0, -12));
 }
 
 void
@@ -1189,25 +998,24 @@ _mesh_setup(Scene_Data *data, float h EINA_UNUSED, float 
w EINA_UNUSED, float d
 
    if (!index)
      {
-        SETUP_MESH(level[0], level[index], 0.4, 0.8, 1.0)
+        ADD_MESH(level[0], level[index], 0.4, 0.8, 1.0)
         SETUP_MESH_NODE(level[index])
-        CUBE_TEXTURE_SET(level[0], level[index], 24, cube_vertices, isource, 
36, cube_indices, red_brick_path)
+        CUBE_TEXTURE_SET(level[0], level[index], isource, red_brick_path)
         NORMAL_SET(level[0], level[index], red_brick_n_path)
 
         eo_do(data->mesh_node_level[index],
-              evas_canvas3d_node_scale_set(9.75, 10.0, 1.0),
+              evas_canvas3d_node_scale_set(19.5, 20.0, 2.0),
               evas_canvas3d_node_position_set(50, 0, -15));
      }
    else
      {
-        SETUP_MESH(level[1], level[index], 0.4, 0.8, 1.0)
+        ADD_MESH(level[1], level[index], 0.4, 0.8, 1.0)
         SETUP_MESH_NODE(level[index])
-        CUBE_TEXTURE_SET(level[1], level[index], 24, cube_vertices,
-                         isource, 36, cube_indices, gray_brick_path)
+        CUBE_TEXTURE_SET(level[1], level[index], isource, gray_brick_path)
         NORMAL_SET(level[1], level[index], gray_brick_n_path)
 
         eo_do(data->mesh_node_level[index],
-              evas_canvas3d_node_scale_set(1.0, 1.0, 4.0),
+              evas_canvas3d_node_scale_set(2.0, 2.0, 8.0),
               evas_canvas3d_node_position_set(40 + (2 * index), -10 + (2 * 
index), -10));
      }
 }
@@ -1217,7 +1025,7 @@ _mesh_setup_warrior(Scene_Data *data)
 {
    /* Setup mesh for warrior */
 
-   SETUP_MESH(warrior, warrior, 0.4, 0.6, 1.0)
+   ADD_MESH(warrior, warrior, 0.4, 0.6, 1.0)
    SETUP_MESH_NODE(warrior)
    MATERIAL_TEXTURE_SET(warrior, warrior, warrior_path, warrior_tex_path)
 
@@ -1229,7 +1037,7 @@ _mesh_setup_warrior(Scene_Data *data)
 void
 _mesh_setup_snake(Scene_Data *data)
 {
-   SETUP_MESH(snake, snake, 0.01, 1.0, 1.0)
+   ADD_MESH(snake, snake, 0.01, 1.0, 1.0)
    SETUP_MESH_NODE(snake)
    MATERIAL_TEXTURE_SET(snake, snake, snake_path, snake_tex_path)
    NORMAL_SET(snake, snake, snake_tex_n_path)
@@ -1242,11 +1050,12 @@ _mesh_setup_snake(Scene_Data *data)
 void
 _mesh_setup_rocket(Scene_Data *data, int index)
 {
-   SETUP_MESH(rocket[index], rocket[index], 0.8, 0.2, 0.5);
+   ADD_MESH(rocket[index], rocket[index], 0.8, 0.2, 0.5);
+   eo_do(data->mesh_rocket[index],
+         evas_canvas3d_mesh_from_primitive_set(0, data->sphere_primitive));
+   SETUP_DEFAULT_MESH(rocket[index], rocket[index], DIFFUSE);
    SETUP_MESH_NODE(rocket[index]);
 
-   SPHERE_SET(rocket[index])
-
    eo_do(data->mesh_node_rocket[index],
          evas_canvas3d_node_scale_set(1, 1, 1),
          evas_canvas3d_node_position_set(ROCKET_POS_X, ROCKET_POS_Y, 
ROCKET_POS_Z));
@@ -1256,6 +1065,20 @@ void
 _scene_setup(Scene_Data *data)
 {
    int i = 0;
+
+   for (i = 0; i < 4; i++)
+      motion_vec[i] = 0;
+
+   data->cube_primitive = eo_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
+   eo_do(data->cube_primitive,
+         evas_canvas3d_primitive_form_set(EVAS_CANVAS3D_MESH_PRIMITIVE_CUBE),
+         evas_canvas3d_primitive_precision_set(10));
+
+   data->sphere_primitive = eo_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas);
+   eo_do(data->sphere_primitive,
+         evas_canvas3d_primitive_form_set(EVAS_CANVAS3D_MESH_PRIMITIVE_SPHERE),
+         evas_canvas3d_primitive_precision_set(50));
+
    global_scene = eo_add(EVAS_CANVAS3D_SCENE_CLASS, evas);
 
    eo_do(global_scene,
@@ -1288,10 +1111,10 @@ _scene_setup(Scene_Data *data)
    for ( i = 0; i < 4; i++)
      _mesh_setup_wall(data, i);
 
-   TEXTCOORDS_SET(bricks1, 1.0, 1.0, 0.2, 1.0, 1.0, 0.2)
+   TEXTCOORDS_SET(bricks1, 1.0, 0.2, 0.2, 1.0, 1.0, 1.0)
    _mesh_setup(data, 9.75, 10, 1, bricks1_textcoords, 0);
 
-   TEXTCOORDS_SET(bricks2, 1.0, 0.5, 3.0, 0.5, 2.0, 1.5)
+   TEXTCOORDS_SET(bricks2, 1.0, 1.5, 3.0, 0.5, 2.0, 0.5)
    for (i = 1; i < 10; i++)
      _mesh_setup(data, 1, 1, 4, bricks2_textcoords, i);
 

-- 


Reply via email to