aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/extantz/Evas_3D_demo.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/extantz/Evas_3D_demo.c')
-rw-r--r--src/extantz/Evas_3D_demo.c87
1 files changed, 26 insertions, 61 deletions
diff --git a/src/extantz/Evas_3D_demo.c b/src/extantz/Evas_3D_demo.c
index b5b4614..5f33fed 100644
--- a/src/extantz/Evas_3D_demo.c
+++ b/src/extantz/Evas_3D_demo.c
@@ -1,37 +1,6 @@
1#include "extantz.h" 1#include "extantz.h"
2 2
3 3
4typedef struct _Scene_Data
5{
6 Evas_Object *image; // Our Elm image.
7 Evas_3D_Scene *scene;
8 Evas_3D_Node *root_node;
9 Evas_3D_Node *camera_node;
10 Evas_3D_Node *light_node;
11
12 Evas_3D_Camera *camera;
13 Evas_3D_Light *light;
14
15 Evas_3D_Mesh *mesh;
16 Evas_3D_Node *mesh_node;
17 Evas_3D_Material *material0;
18 Evas_3D_Material *material1;
19 Evas_3D_Texture *texture0;
20 Evas_3D_Texture *texture1;
21 Evas_3D_Texture *texture_normal;
22
23 Evas_3D_Mesh *mesh2;
24 Evas_3D_Node *mesh2_node;
25 Evas_3D_Material *material2;
26 Evas_3D_Texture *texture2;
27
28 Evas_3D_Mesh *mesh3;
29 Evas_3D_Node *mesh3_node;
30 Evas_3D_Material *material3;
31 Evas_3D_Texture *texture_diffuse;
32
33} Scene_Data;
34
35static Scene_Data ourScene; 4static Scene_Data ourScene;
36 5
37 6
@@ -161,15 +130,6 @@ _normalize(const vec3 *v)
161 return vec; 130 return vec;
162} 131}
163 132
164static void
165_sphere_fini()
166{
167 if (sphere_vertices)
168 free(sphere_vertices);
169
170 if (sphere_indices)
171 free(sphere_indices);
172}
173 133
174static void 134static void
175_sphere_init(int precision) 135_sphere_init(int precision)
@@ -306,8 +266,7 @@ _sphere_init(int precision)
306} 266}
307 267
308 268
309static Eina_Bool 269Eina_Bool _animate_scene(void *data)
310_animate_scene(void *data)
311{ 270{
312 static float angle = 0.0f; 271 static float angle = 0.0f;
313 static float earthAngle = 0.0f; 272 static float earthAngle = 0.0f;
@@ -393,6 +352,8 @@ _light_setup(globals *ourGlobals, Scene_Data *scene)
393 352
394static void _cube_setup(globals *ourGlobals, Scene_Data *scene) 353static void _cube_setup(globals *ourGlobals, Scene_Data *scene)
395{ 354{
355 char buf[PATH_MAX];
356
396 // Setup cube materials. 357 // Setup cube materials.
397 scene->material0 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas); 358 scene->material0 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas);
398 scene->material1 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas); 359 scene->material1 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas);
@@ -431,7 +392,8 @@ static void _cube_setup(globals *ourGlobals, Scene_Data *scene)
431 eo_do(scene->texture1, 392 eo_do(scene->texture1,
432 evas_3d_texture_data_set(EVAS_3D_COLOR_FORMAT_RGBA, EVAS_3D_PIXEL_FORMAT_8888, 4, 4, &pixels1[0]) 393 evas_3d_texture_data_set(EVAS_3D_COLOR_FORMAT_RGBA, EVAS_3D_PIXEL_FORMAT_8888, 4, 4, &pixels1[0])
433 ); 394 );
434 eo_do(scene->texture_normal, evas_3d_texture_file_set("media/normal_lego.png", NULL)); 395 snprintf(buf, sizeof(buf), "%s/normal_lego.png", elm_app_data_dir_get());
396 eo_do(scene->texture_normal, evas_3d_texture_file_set(buf, NULL));
435 397
436 eo_do(scene->material0, evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture0)); 398 eo_do(scene->material0, evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture0));
437 eo_do(scene->material1, evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture1)); 399 eo_do(scene->material1, evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture1));
@@ -469,10 +431,13 @@ static void _cube_setup(globals *ourGlobals, Scene_Data *scene)
469 431
470static void _sonic_setup(globals *ourGlobals, Scene_Data *scene) 432static void _sonic_setup(globals *ourGlobals, Scene_Data *scene)
471{ 433{
434 char buf[PATH_MAX];
435
472 // Setup an MD2 mesh. 436 // Setup an MD2 mesh.
473 scene->mesh2 = eo_add(EVAS_3D_MESH_CLASS, ourGlobals->evas); 437 scene->mesh2 = eo_add(EVAS_3D_MESH_CLASS, ourGlobals->evas);
438 snprintf(buf, sizeof(buf), "%s/sonic.md2", elm_app_data_dir_get());
474 eo_do(scene->mesh2, 439 eo_do(scene->mesh2,
475 evas_3d_mesh_file_set(EVAS_3D_MESH_FILE_TYPE_MD2, "media/sonic.md2", NULL) 440 evas_3d_mesh_file_set(EVAS_3D_MESH_FILE_TYPE_MD2, buf, NULL)
476 ); 441 );
477 442
478 scene->material2 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas); 443 scene->material2 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas);
@@ -481,8 +446,9 @@ static void _sonic_setup(globals *ourGlobals, Scene_Data *scene)
481 ); 446 );
482 447
483 scene->texture2 = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas); 448 scene->texture2 = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas);
449 snprintf(buf, sizeof(buf), "%s/sonic.png", elm_app_data_dir_get());
484 eo_do(scene->texture2, 450 eo_do(scene->texture2,
485 evas_3d_texture_file_set("media/sonic.png", NULL), 451 evas_3d_texture_file_set(buf, NULL),
486 evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_NEAREST, EVAS_3D_TEXTURE_FILTER_NEAREST), 452 evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_NEAREST, EVAS_3D_TEXTURE_FILTER_NEAREST),
487 evas_3d_texture_wrap_set(EVAS_3D_WRAP_MODE_REPEAT, EVAS_3D_WRAP_MODE_REPEAT) 453 evas_3d_texture_wrap_set(EVAS_3D_WRAP_MODE_REPEAT, EVAS_3D_WRAP_MODE_REPEAT)
488 ); 454 );
@@ -517,12 +483,15 @@ static void _sonic_setup(globals *ourGlobals, Scene_Data *scene)
517 483
518static void _earth_setup(globals *ourGlobals, Scene_Data *scene) 484static void _earth_setup(globals *ourGlobals, Scene_Data *scene)
519{ 485{
486 char buf[PATH_MAX];
487
520 // Setup earth material. 488 // Setup earth material.
521 scene->material3 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas); 489 scene->material3 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas);
522 490
523 scene->texture_diffuse = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas); 491 scene->texture_diffuse = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas);
492 snprintf(buf, sizeof(buf), "%s/EarthDiffuse.png", elm_app_data_dir_get());
524 eo_do(scene->texture_diffuse, 493 eo_do(scene->texture_diffuse,
525 evas_3d_texture_file_set("media/EarthDiffuse.png", NULL), 494 evas_3d_texture_file_set(buf, NULL),
526 evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_LINEAR, EVAS_3D_TEXTURE_FILTER_LINEAR)); 495 evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_LINEAR, EVAS_3D_TEXTURE_FILTER_LINEAR));
527 eo_do(scene->material3, 496 eo_do(scene->material3,
528 evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture_diffuse), 497 evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture_diffuse),
@@ -597,7 +566,6 @@ _scene_setup(globals *ourGlobals, Scene_Data *scene)
597} 566}
598 567
599 568
600
601static void _on_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *o, void *einfo) 569static void _on_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *o, void *einfo)
602{ 570{
603 Scene_Data *scene = data; 571 Scene_Data *scene = data;
@@ -649,7 +617,7 @@ static void _on_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *o, void
649 Evas_3D_Node *n; 617 Evas_3D_Node *n;
650 Evas_3D_Mesh *m; 618 Evas_3D_Mesh *m;
651 Eina_Bool pick; 619 Eina_Bool pick;
652 char *name; 620 char *name = NULL;
653 621
654 evas_object_geometry_get(o, &x, &y, &w, &h); 622 evas_object_geometry_get(o, &x, &y, &w, &h);
655 623
@@ -685,18 +653,8 @@ void Evas_3D_Demo_add(globals *ourGlobals)
685{ 653{
686 Evas_Object *obj, *temp; 654 Evas_Object *obj, *temp;
687 655
688 _scene_setup(ourGlobals, &ourScene); 656 ourGlobals->scene = &ourScene;
689 657 _scene_setup(ourGlobals, &ourScene);
690 // Add a background image object.
691 obj = eo_add(ELM_OBJ_IMAGE_CLASS, ourGlobals->win);
692 eo_do(obj,
693 evas_obj_size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND),
694 elm_obj_image_fill_outside_set(EINA_TRUE),
695 elm_obj_image_file_set("media/sky_01.jpg", NULL),
696 evas_obj_visibility_set(EINA_TRUE)
697 );
698 elm_win_resize_object_add(ourGlobals->win, obj);
699 eo_unref(obj);
700 658
701 // Add an image object for 3D scene rendering. 659 // Add an image object for 3D scene rendering.
702 obj = eo_add(ELM_OBJ_IMAGE_CLASS, ourGlobals->win); 660 obj = eo_add(ELM_OBJ_IMAGE_CLASS, ourGlobals->win);
@@ -716,7 +674,14 @@ void Evas_3D_Demo_add(globals *ourGlobals)
716 evas_object_event_callback_add(temp, EVAS_CALLBACK_MOUSE_MOVE, _on_mouse_move, &ourScene); 674 evas_object_event_callback_add(temp, EVAS_CALLBACK_MOUSE_MOVE, _on_mouse_move, &ourScene);
717 evas_object_event_callback_add(temp, EVAS_CALLBACK_MOUSE_DOWN, _on_mouse_down, &ourScene); 675 evas_object_event_callback_add(temp, EVAS_CALLBACK_MOUSE_DOWN, _on_mouse_down, &ourScene);
718 elm_win_resize_object_add(ourGlobals->win, obj); 676 elm_win_resize_object_add(ourGlobals->win, obj);
677// elm_box_pack_end(ourGlobals->gld.bx, obj);
719 678
720 // Add animation timer callback. 679 // Add animation timer callback.
721 ecore_timer_add(0.016, _animate_scene, &ourScene); 680// ecore_timer_add(0.016, _animate_scene, &ourScene);
722} 681}
682
683void Evas_3D_Demo_fini()
684{
685 free(sphere_vertices);
686 free(sphere_indices);
687} \ No newline at end of file