diff options
author | David Walter Seikel | 2014-05-02 19:52:58 +1000 |
---|---|---|
committer | David Walter Seikel | 2014-05-02 19:52:58 +1000 |
commit | bb23c72a3ef3e460c8b88230354af65e78240d49 (patch) | |
tree | 0caabb852301d0310ed61168be6a0daacdb0ad9f /src/extantz/Evas_3D_demo.c | |
parent | Minor clean ups of the overlay comments. (diff) | |
download | SledjHamr-bb23c72a3ef3e460c8b88230354af65e78240d49.zip SledjHamr-bb23c72a3ef3e460c8b88230354af65e78240d49.tar.gz SledjHamr-bb23c72a3ef3e460c8b88230354af65e78240d49.tar.bz2 SledjHamr-bb23c72a3ef3e460c8b88230354af65e78240d49.tar.xz |
Major cleanup of extantz, part one.
Diffstat (limited to '')
-rw-r--r-- | src/extantz/Evas_3D_demo.c | 87 |
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 | ||
4 | typedef 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 | |||
35 | static Scene_Data ourScene; | 4 | static 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 | ||
164 | static 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 | ||
174 | static void | 134 | static 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 | ||
309 | static Eina_Bool | 269 | Eina_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 | ||
394 | static void _cube_setup(globals *ourGlobals, Scene_Data *scene) | 353 | static 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 | ||
470 | static void _sonic_setup(globals *ourGlobals, Scene_Data *scene) | 432 | static 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 | ||
518 | static void _earth_setup(globals *ourGlobals, Scene_Data *scene) | 484 | static 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 | |||
601 | static void _on_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *o, void *einfo) | 569 | static 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 | |||
683 | void Evas_3D_Demo_fini() | ||
684 | { | ||
685 | free(sphere_vertices); | ||
686 | free(sphere_indices); | ||
687 | } \ No newline at end of file | ||