diff options
author | Oleksandr Shcherbina <o.shcherbina@samsung.com> | 2015-02-11 17:44:42 +0100 |
---|---|---|
committer | Cedric BAIL <cedric@osg.samsung.com> | 2015-02-11 17:44:50 +0100 |
commit | dc0b144cf09deba3a5a6fe746f0130b67b5bf64b (patch) | |
tree | eb1cab25e7c7b62aff9151b50f1ff0e0fd2d9d21 | |
parent | 46b9b23144ba6a95d619b1aa21ec326ea92303b6 (diff) |
evas: Evas_3D - mechanism for finding node by color pick.
Summary:
See first part https://phab.enlightenment.org/D1811 (backend, gl)
Add get/set for color pick mode at evas_3d_mesh and evas_3d_scene
Add evas_3d_node_color_node_mesh_collect function to collect data at force rendering
Add state flag for scene to avoid useless force rendering in case scene wasn't changed
Add functionality for color pick in evas_3d_scene_pick method
Reviewers: Hermet, raster, cedric
Reviewed By: cedric
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D1956
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
-rw-r--r-- | src/lib/evas/Evas_Eo.h | 1 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_3d_mesh.c | 17 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_3d_mesh.eo | 21 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_3d_node.c | 71 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_3d_scene.c | 109 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_3d_scene.eo | 21 | ||||
-rw-r--r-- | src/lib/evas/include/evas_private.h | 8 |
7 files changed, 242 insertions, 6 deletions
diff --git a/src/lib/evas/Evas_Eo.h b/src/lib/evas/Evas_Eo.h index 8fa89b30ba..033ada29cf 100644 --- a/src/lib/evas/Evas_Eo.h +++ b/src/lib/evas/Evas_Eo.h | |||
@@ -468,6 +468,7 @@ typedef enum _Evas_3D_State | |||
468 | EVAS_3D_STATE_SCENE_BACKGROUND_COLOR, | 468 | EVAS_3D_STATE_SCENE_BACKGROUND_COLOR, |
469 | EVAS_3D_STATE_SCENE_SIZE, | 469 | EVAS_3D_STATE_SCENE_SIZE, |
470 | EVAS_3D_STATE_SCENE_SHADOWS_ENABLED, | 470 | EVAS_3D_STATE_SCENE_SHADOWS_ENABLED, |
471 | EVAS_3D_STATE_SCENE_UPDATED, | ||
471 | 472 | ||
472 | EVAS_3D_STATE_TEXTURE_DATA = 1, | 473 | EVAS_3D_STATE_TEXTURE_DATA = 1, |
473 | EVAS_3D_STATE_TEXTURE_WRAP, | 474 | EVAS_3D_STATE_TEXTURE_WRAP, |
diff --git a/src/lib/evas/canvas/evas_3d_mesh.c b/src/lib/evas/canvas/evas_3d_mesh.c index ddbf61916f..4430438054 100644 --- a/src/lib/evas/canvas/evas_3d_mesh.c +++ b/src/lib/evas/canvas/evas_3d_mesh.c | |||
@@ -120,6 +120,9 @@ _mesh_init(Evas_3D_Mesh_Data *pd) | |||
120 | pd->blend_sfactor = EVAS_3D_BLEND_ONE; | 120 | pd->blend_sfactor = EVAS_3D_BLEND_ONE; |
121 | pd->blend_dfactor = EVAS_3D_BLEND_ZERO; | 121 | pd->blend_dfactor = EVAS_3D_BLEND_ZERO; |
122 | pd->blending = EINA_FALSE; | 122 | pd->blending = EINA_FALSE; |
123 | |||
124 | pd->color_pick_key = -1.0; | ||
125 | pd->color_pick_enabled = EINA_FALSE; | ||
123 | } | 126 | } |
124 | 127 | ||
125 | static inline void | 128 | static inline void |
@@ -963,4 +966,18 @@ evas_3d_mesh_interpolate_vertex_buffer_get(Evas_3D_Mesh *mesh, int frame, | |||
963 | } | 966 | } |
964 | } | 967 | } |
965 | 968 | ||
969 | EOLIAN static Eina_Bool | ||
970 | _evas_3d_mesh_color_pick_enable_get(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd) | ||
971 | { | ||
972 | return pd->color_pick_enabled; | ||
973 | } | ||
974 | EOLIAN static Eina_Bool | ||
975 | _evas_3d_mesh_color_pick_enable_set(Eo *obj, Evas_3D_Mesh_Data *pd, Eina_Bool _enabled) | ||
976 | { | ||
977 | if (pd->color_pick_enabled != _enabled) | ||
978 | pd->color_pick_enabled = _enabled; | ||
979 | eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_COLOR_PICK, NULL)); | ||
980 | return EINA_TRUE; | ||
981 | } | ||
982 | |||
966 | #include "canvas/evas_3d_mesh.eo.c" | 983 | #include "canvas/evas_3d_mesh.eo.c" |
diff --git a/src/lib/evas/canvas/evas_3d_mesh.eo b/src/lib/evas/canvas/evas_3d_mesh.eo index 5657b32e54..a23654aa39 100644 --- a/src/lib/evas/canvas/evas_3d_mesh.eo +++ b/src/lib/evas/canvas/evas_3d_mesh.eo | |||
@@ -352,6 +352,27 @@ class Evas_3D_Mesh (Evas_3D_Object, Evas.Common_Interface, Efl.File) | |||
352 | params { | 352 | params { |
353 | } | 353 | } |
354 | } | 354 | } |
355 | color_pick_enable_get @const { | ||
356 | /* | ||
357 | Get status of color picking of the mesh. | ||
358 | |||
359 | @ingroup Evas_3D_Mesh | ||
360 | */ | ||
361 | return: bool; | ||
362 | params { | ||
363 | } | ||
364 | } | ||
365 | color_pick_enable_set { | ||
366 | /* | ||
367 | Set posibility color picking. | ||
368 | |||
369 | @ingroup Evas_3D_Mesh | ||
370 | */ | ||
371 | return: bool; | ||
372 | params { | ||
373 | @in bool _enabled; /*@ Posibility flag */ | ||
374 | } | ||
375 | } | ||
355 | } | 376 | } |
356 | properties { | 377 | properties { |
357 | shade_mode { | 378 | shade_mode { |
diff --git a/src/lib/evas/canvas/evas_3d_node.c b/src/lib/evas/canvas/evas_3d_node.c index a5355ed4ec..62e2c1cb01 100644 --- a/src/lib/evas/canvas/evas_3d_node.c +++ b/src/lib/evas/canvas/evas_3d_node.c | |||
@@ -6,6 +6,27 @@ | |||
6 | 6 | ||
7 | Evas_3D_Mesh_Frame *evas_3d_mesh_frame_find(Evas_3D_Mesh_Data *pd, int frame); | 7 | Evas_3D_Mesh_Frame *evas_3d_mesh_frame_find(Evas_3D_Mesh_Data *pd, int frame); |
8 | 8 | ||
9 | static Eina_Stringshare * | ||
10 | _generate_unic_color_key(Evas_Color *color, Evas_Color *bg_color, Evas_3D_Node *node, Evas_3D_Mesh *mesh, | ||
11 | Eina_Bool init) | ||
12 | { | ||
13 | static unsigned short red = USHRT_MAX; | ||
14 | |||
15 | if (init) red = USHRT_MAX; | ||
16 | |||
17 | if (fabs(bg_color->r - (double)red) <= DBL_EPSILON) red--; | ||
18 | |||
19 | color->r = (double)red / USHRT_MAX; | ||
20 | color->g = 0.0; | ||
21 | color->b = 0.0; | ||
22 | |||
23 | red--; | ||
24 | |||
25 | if (red < 1) red = USHRT_MAX; | ||
26 | |||
27 | return eina_stringshare_printf("%p %p", node, mesh); | ||
28 | } | ||
29 | |||
9 | static inline Evas_3D_Node_Mesh * | 30 | static inline Evas_3D_Node_Mesh * |
10 | _node_mesh_new(Evas_3D_Node *node, Evas_3D_Mesh *mesh) | 31 | _node_mesh_new(Evas_3D_Node *node, Evas_3D_Mesh *mesh) |
11 | { | 32 | { |
@@ -795,6 +816,56 @@ evas_3d_node_mesh_collect(Evas_3D_Node *node, void *data) | |||
795 | } | 816 | } |
796 | 817 | ||
797 | Eina_Bool | 818 | Eina_Bool |
819 | evas_3d_node_color_node_mesh_collect(Evas_3D_Node *node, void *data) | ||
820 | { | ||
821 | Evas_3D_Scene_Public_Data *scene_data = (Evas_3D_Scene_Public_Data *)data; | ||
822 | Evas_3D_Node_Data *pd = eo_data_scope_get(node, MY_CLASS); | ||
823 | Evas_3D_Node_Data *pd_camera = eo_data_scope_get(scene_data->camera_node, MY_CLASS); | ||
824 | Evas_3D_Camera *camera = (Evas_3D_Camera*)pd_camera->data.camera.camera; | ||
825 | |||
826 | Eina_List *list_meshes, *l; | ||
827 | Evas_3D_Mesh *mesh; | ||
828 | Eina_Stringshare *key, *datakey; | ||
829 | Evas_Color *color; | ||
830 | Eina_Bool visible = EINA_FALSE; | ||
831 | Eina_Array *arr; | ||
832 | if (pd->type == EVAS_3D_NODE_TYPE_MESH) | ||
833 | { | ||
834 | eo_do(camera, | ||
835 | visible = evas_3d_camera_node_visible_get(scene_data->camera_node, | ||
836 | node, EVAS_3D_FRUSTUM_MODE_BSPHERE)); | ||
837 | if (visible) | ||
838 | { | ||
839 | eo_do (node, list_meshes = (Eina_List *)evas_3d_node_mesh_list_get()); | ||
840 | EINA_LIST_FOREACH(list_meshes, l, mesh) | ||
841 | { | ||
842 | if (eo_do(mesh, evas_3d_mesh_color_pick_enable_get())) | ||
843 | { | ||
844 | color = calloc(1, sizeof(Evas_Color)); | ||
845 | |||
846 | if (!eina_hash_population(scene_data->node_mesh_colors)) | ||
847 | key = _generate_unic_color_key(color, &scene_data->bg_color, | ||
848 | node, mesh, EINA_TRUE); | ||
849 | else | ||
850 | key = _generate_unic_color_key(color, &scene_data->bg_color, | ||
851 | node, mesh, EINA_FALSE); | ||
852 | |||
853 | datakey = eina_stringshare_printf("%f %f %f", color->r, color->g, color->b); | ||
854 | eina_hash_add(scene_data->node_mesh_colors, key, color); | ||
855 | arr = eina_array_new(2); | ||
856 | eina_array_push(arr, (void *)node); | ||
857 | eina_array_push(arr, (void *)mesh); | ||
858 | eina_hash_add(scene_data->colors_node_mesh, datakey, arr); | ||
859 | } | ||
860 | } | ||
861 | } | ||
862 | else | ||
863 | return EINA_FALSE; | ||
864 | } | ||
865 | return EINA_TRUE; | ||
866 | } | ||
867 | |||
868 | Eina_Bool | ||
798 | evas_3d_node_light_collect(Evas_3D_Node *node, void *data) | 869 | evas_3d_node_light_collect(Evas_3D_Node *node, void *data) |
799 | { | 870 | { |
800 | Evas_3D_Scene_Public_Data *scene_data = (Evas_3D_Scene_Public_Data *)data; | 871 | Evas_3D_Scene_Public_Data *scene_data = (Evas_3D_Scene_Public_Data *)data; |
diff --git a/src/lib/evas/canvas/evas_3d_scene.c b/src/lib/evas/canvas/evas_3d_scene.c index 0e177a74ca..a26b6c8967 100644 --- a/src/lib/evas/canvas/evas_3d_scene.c +++ b/src/lib/evas/canvas/evas_3d_scene.c | |||
@@ -9,6 +9,8 @@ evas_3d_scene_data_init(Evas_3D_Scene_Public_Data *data) | |||
9 | data->camera_node = NULL; | 9 | data->camera_node = NULL; |
10 | data->light_nodes = NULL; | 10 | data->light_nodes = NULL; |
11 | data->mesh_nodes = NULL; | 11 | data->mesh_nodes = NULL; |
12 | data->node_mesh_colors = NULL; | ||
13 | data->colors_node_mesh = NULL; | ||
12 | } | 14 | } |
13 | 15 | ||
14 | void | 16 | void |
@@ -46,6 +48,8 @@ _evas_3d_scene_evas_3d_object_update_notify(Eo *obj EINA_UNUSED, Evas_3D_Scene_D | |||
46 | { | 48 | { |
47 | eo_do(pd->camera_node, evas_3d_object_update()); | 49 | eo_do(pd->camera_node, evas_3d_object_update()); |
48 | } | 50 | } |
51 | |||
52 | eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_SCENE_UPDATED, NULL)); | ||
49 | } | 53 | } |
50 | 54 | ||
51 | EAPI Evas_3D_Scene * | 55 | EAPI Evas_3D_Scene * |
@@ -65,6 +69,9 @@ _evas_3d_scene_eo_base_constructor(Eo *obj, Evas_3D_Scene_Data *pd) | |||
65 | eo_do(obj, evas_3d_object_type_set(EVAS_3D_OBJECT_TYPE_SCENE)); | 69 | eo_do(obj, evas_3d_object_type_set(EVAS_3D_OBJECT_TYPE_SCENE)); |
66 | evas_color_set(&pd->bg_color, 0.0, 0.0, 0.0, 0.0); | 70 | evas_color_set(&pd->bg_color, 0.0, 0.0, 0.0, 0.0); |
67 | pd->shadows_enabled = EINA_FALSE; | 71 | pd->shadows_enabled = EINA_FALSE; |
72 | pd->color_pick_enabled = EINA_FALSE; | ||
73 | pd->node_mesh_colors = NULL; | ||
74 | pd->colors_node_mesh = NULL; | ||
68 | } | 75 | } |
69 | 76 | ||
70 | EOLIAN static void | 77 | EOLIAN static void |
@@ -608,17 +615,32 @@ _node_pick(Evas_3D_Node *node, void *data) | |||
608 | return EINA_TRUE; | 615 | return EINA_TRUE; |
609 | } | 616 | } |
610 | 617 | ||
618 | static void _node_mesh_colors_free_cb(void *data) | ||
619 | { | ||
620 | if (data) free(data); | ||
621 | } | ||
622 | |||
611 | EOLIAN static Eina_Bool | 623 | EOLIAN static Eina_Bool |
612 | _evas_3d_scene_pick(Eo *obj, Evas_3D_Scene_Data *pd, Evas_Real x, Evas_Real y, | 624 | _evas_3d_scene_pick(Eo *obj, Evas_3D_Scene_Data *pd, Evas_Real x, Evas_Real y, |
613 | Evas_3D_Node **node, Evas_3D_Mesh **mesh, | 625 | Evas_3D_Node **node, Evas_3D_Mesh **mesh, |
614 | Evas_Real *s, Evas_Real *t) | 626 | Evas_Real *s, Evas_Real *t) |
615 | { | 627 | { |
616 | /* TODO: Use H/W picking if availabe. */ | ||
617 | Evas_3D_Pick_Data data; | 628 | Evas_3D_Pick_Data data; |
629 | Evas_3D_Node_Data *pd_camera_node; | ||
630 | Evas_3D_Camera_Data *pd_camera; | ||
631 | Evas_3D_Object_Data *pd_parent; | ||
632 | Evas_Public_Data *e; | ||
633 | int tex, px, py;; | ||
634 | double redcomponent; | ||
635 | Eina_Stringshare *tmp; | ||
636 | Eina_Array *arr = NULL; | ||
637 | Eina_Bool update_scene = EINA_FALSE; | ||
638 | |||
639 | pd_parent = eo_data_scope_get(obj, EVAS_3D_OBJECT_CLASS); | ||
640 | e = eo_data_scope_get(pd_parent->evas, EVAS_CANVAS_CLASS); | ||
618 | 641 | ||
619 | data.x = ((x * 2.0) / (Evas_Real)pd->w) - 1.0; | 642 | data.x = ((x * 2.0) / (Evas_Real)pd->w) - 1.0; |
620 | data.y = (((pd->h - y - 1) * 2.0) / ((Evas_Real)pd->h)) - 1.0; | 643 | data.y = (((pd->h - y - 1) * 2.0) / ((Evas_Real)pd->h)) - 1.0; |
621 | |||
622 | data.picked = EINA_FALSE; | 644 | data.picked = EINA_FALSE; |
623 | data.z = 1.0; | 645 | data.z = 1.0; |
624 | data.node = NULL; | 646 | data.node = NULL; |
@@ -626,17 +648,78 @@ _evas_3d_scene_pick(Eo *obj, Evas_3D_Scene_Data *pd, Evas_Real x, Evas_Real y, | |||
626 | data.s = 0.0; | 648 | data.s = 0.0; |
627 | data.t = 0.0; | 649 | data.t = 0.0; |
628 | 650 | ||
651 | px = round(x * pd->w / e->viewport.w); | ||
652 | py = round((pd->h - (y * pd->h / e->viewport.h) - 1)); | ||
653 | |||
654 | /*Use color pick mechanism finding node and mesh*/ | ||
655 | if (pd->color_pick_enabled) | ||
656 | { | ||
657 | Evas_3D_Scene_Public_Data scene_data; | ||
658 | |||
659 | scene_data.bg_color = pd->bg_color; | ||
660 | scene_data.shadows_enabled = pd->shadows_enabled; | ||
661 | scene_data.camera_node = pd->camera_node; | ||
662 | scene_data.color_pick_enabled = pd->color_pick_enabled; | ||
663 | update_scene = eo_do(obj, evas_3d_object_dirty_get(EVAS_3D_STATE_SCENE_UPDATED)); | ||
664 | if (update_scene) | ||
665 | { | ||
666 | if (pd->node_mesh_colors) | ||
667 | { | ||
668 | eina_hash_free(pd->node_mesh_colors); | ||
669 | eina_hash_free(pd->colors_node_mesh); | ||
670 | pd->node_mesh_colors = NULL; | ||
671 | pd->colors_node_mesh = NULL; | ||
672 | } | ||
673 | pd->node_mesh_colors = eina_hash_stringshared_new(_node_mesh_colors_free_cb); | ||
674 | pd->colors_node_mesh = eina_hash_stringshared_new(_node_mesh_colors_free_cb); | ||
675 | } | ||
676 | scene_data.node_mesh_colors = pd->node_mesh_colors; | ||
677 | scene_data.colors_node_mesh = pd->colors_node_mesh; | ||
678 | evas_3d_node_tree_traverse(pd->root_node, | ||
679 | EVAS_3D_TREE_TRAVERSE_LEVEL_ORDER, EINA_TRUE, | ||
680 | evas_3d_node_color_node_mesh_collect, &scene_data); | ||
681 | |||
682 | if (e->engine.func->drawable_scene_render_to_texture) | ||
683 | { | ||
684 | if (e->engine.func->drawable_scene_render_to_texture(e->engine.data.output, | ||
685 | pd->surface, &scene_data)) | ||
686 | { | ||
687 | if (e->engine.func->drawable_texture_color_pick_id_get) | ||
688 | tex = e->engine.func->drawable_texture_color_pick_id_get(pd->surface); | ||
689 | if (e->engine.func->drawable_texture_pixel_color_get) | ||
690 | { | ||
691 | redcomponent = e->engine.func->drawable_texture_pixel_color_get(tex, px, py, pd->surface); | ||
692 | tmp = eina_stringshare_printf("%f %f %f", redcomponent, 0.0, 0.0); | ||
693 | arr = (Eina_Array *)eina_hash_find(pd->colors_node_mesh, tmp); | ||
694 | if (arr) | ||
695 | { | ||
696 | if (mesh) *mesh = (Evas_3D_Mesh *)eina_array_data_get(arr, 1); | ||
697 | if (node) *node = (Evas_3D_Node *)eina_array_data_get(arr, 0); | ||
698 | eina_stringshare_del(tmp); | ||
699 | |||
700 | return EINA_TRUE; | ||
701 | } | ||
702 | else | ||
703 | { | ||
704 | eina_stringshare_del(tmp); | ||
705 | if (mesh) *mesh = NULL; | ||
706 | if (node) *node = NULL; | ||
707 | } | ||
708 | } | ||
709 | } | ||
710 | } | ||
711 | return EINA_FALSE; | ||
712 | } | ||
629 | /* Update the scene graph. */ | 713 | /* Update the scene graph. */ |
630 | eo_do(obj, evas_3d_object_update()); | 714 | eo_do(obj, evas_3d_object_update()); |
631 | Evas_3D_Node_Data *pd_camera_node = eo_data_scope_get(pd->camera_node, EVAS_3D_NODE_CLASS); | 715 | pd_camera_node = eo_data_scope_get(pd->camera_node, EVAS_3D_NODE_CLASS); |
632 | Evas_3D_Camera_Data *pd_camera = eo_data_scope_get(pd_camera_node->data.camera.camera, EVAS_3D_CAMERA_CLASS); | 716 | pd_camera = eo_data_scope_get(pd_camera_node->data.camera.camera, EVAS_3D_CAMERA_CLASS); |
633 | evas_mat4_multiply(&data.matrix_vp, | 717 | evas_mat4_multiply(&data.matrix_vp, |
634 | &pd_camera->projection, | 718 | &pd_camera->projection, |
635 | &pd_camera_node->data.camera.matrix_world_to_eye); | 719 | &pd_camera_node->data.camera.matrix_world_to_eye); |
636 | 720 | ||
637 | evas_ray3_init(&data.ray_world, data.x, data.y, &data.matrix_vp); | 721 | evas_ray3_init(&data.ray_world, data.x, data.y, &data.matrix_vp); |
638 | 722 | ||
639 | |||
640 | /* Traverse tree while adding meshes into pick data structure. */ | 723 | /* Traverse tree while adding meshes into pick data structure. */ |
641 | evas_3d_node_tree_traverse(pd->root_node, EVAS_3D_TREE_TRAVERSE_LEVEL_ORDER, EINA_TRUE, | 724 | evas_3d_node_tree_traverse(pd->root_node, EVAS_3D_TREE_TRAVERSE_LEVEL_ORDER, EINA_TRUE, |
642 | _node_pick, &data); | 725 | _node_pick, &data); |
@@ -726,4 +809,20 @@ _evas_3d_scene_shadows_enable_set(Eo *obj EINA_UNUSED, Evas_3D_Scene_Data *pd, E | |||
726 | eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_SCENE_SHADOWS_ENABLED, NULL)); | 809 | eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_SCENE_SHADOWS_ENABLED, NULL)); |
727 | } | 810 | } |
728 | 811 | ||
812 | EOLIAN static Eina_Bool | ||
813 | _evas_3d_scene_color_pick_enable_get(Eo *obj EINA_UNUSED, Evas_3D_Scene_Data *pd) | ||
814 | { | ||
815 | return pd->color_pick_enabled; | ||
816 | } | ||
817 | |||
818 | EOLIAN static Eina_Bool | ||
819 | _evas_3d_scene_color_pick_enable_set(Eo *obj EINA_UNUSED, Evas_3D_Scene_Data *pd, Eina_Bool _enabled) | ||
820 | { | ||
821 | if (pd->color_pick_enabled != _enabled) | ||
822 | pd->color_pick_enabled = _enabled; | ||
823 | |||
824 | eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_SCENE_UPDATED, NULL)); | ||
825 | return EINA_TRUE; | ||
826 | } | ||
827 | |||
729 | #include "canvas/evas_3d_scene.eo.c" | 828 | #include "canvas/evas_3d_scene.eo.c" |
diff --git a/src/lib/evas/canvas/evas_3d_scene.eo b/src/lib/evas/canvas/evas_3d_scene.eo index 1078c0262a..bb25f90776 100644 --- a/src/lib/evas/canvas/evas_3d_scene.eo +++ b/src/lib/evas/canvas/evas_3d_scene.eo | |||
@@ -136,6 +136,27 @@ class Evas_3D_Scene (Evas_3D_Object, Evas.Common_Interface) | |||
136 | params { | 136 | params { |
137 | } | 137 | } |
138 | } | 138 | } |
139 | color_pick_enable_get @const { | ||
140 | /* | ||
141 | Get status of color picking of the scene. | ||
142 | |||
143 | @ingroup Evas_3D_Scene | ||
144 | */ | ||
145 | return: bool; | ||
146 | params { | ||
147 | } | ||
148 | } | ||
149 | color_pick_enable_set { | ||
150 | /* | ||
151 | Set posibility color picking. | ||
152 | |||
153 | @ingroup Evas_3D_Scene | ||
154 | */ | ||
155 | return: bool; | ||
156 | params { | ||
157 | @in bool color_pick; /*@ Posibility flag */ | ||
158 | } | ||
159 | } | ||
139 | } | 160 | } |
140 | properties { | 161 | properties { |
141 | 162 | ||
diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index c07cfa31df..ceab19d960 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h | |||
@@ -191,11 +191,15 @@ struct _Evas_3D_Scene | |||
191 | Evas_3D_Node *root_node; | 191 | Evas_3D_Node *root_node; |
192 | Evas_3D_Node *camera_node; | 192 | Evas_3D_Node *camera_node; |
193 | Evas_Color bg_color; | 193 | Evas_Color bg_color; |
194 | Eina_Bool shadows_enabled :1; | ||
195 | Eina_Bool color_pick_enabled :1; | ||
194 | 196 | ||
195 | void *surface; | 197 | void *surface; |
196 | int w, h; | 198 | int w, h; |
197 | Eina_List *images; | 199 | Eina_List *images; |
198 | Eina_Bool shadows_enabled :1; | 200 | |
201 | Eina_Hash *node_mesh_colors; | ||
202 | Eina_Hash *colors_node_mesh; | ||
199 | }; | 203 | }; |
200 | 204 | ||
201 | struct _Evas_3D_Node_Mesh | 205 | struct _Evas_3D_Node_Mesh |
@@ -380,6 +384,7 @@ struct _Evas_3D_Scene_Public_Data | |||
380 | Eina_List *mesh_nodes; | 384 | Eina_List *mesh_nodes; |
381 | Eina_Bool shadows_enabled :1; | 385 | Eina_Bool shadows_enabled :1; |
382 | Eina_Bool color_pick_enabled :1; | 386 | Eina_Bool color_pick_enabled :1; |
387 | |||
383 | Eina_Hash *node_mesh_colors; | 388 | Eina_Hash *node_mesh_colors; |
384 | Eina_Hash *colors_node_mesh; | 389 | Eina_Hash *colors_node_mesh; |
385 | }; | 390 | }; |
@@ -1628,6 +1633,7 @@ void _canvas_smart_objects_calculate_count_get(Eo *e, void *_pd, va_list *list); | |||
1628 | void evas_3d_node_traverse(Evas_3D_Node *from, Evas_3D_Node *to, Evas_3D_Node_Traverse_Type type, Eina_Bool skip, Evas_3D_Node_Func func, void *data); | 1633 | void evas_3d_node_traverse(Evas_3D_Node *from, Evas_3D_Node *to, Evas_3D_Node_Traverse_Type type, Eina_Bool skip, Evas_3D_Node_Func func, void *data); |
1629 | void evas_3d_node_tree_traverse(Evas_3D_Node *root, Evas_3D_Tree_Traverse_Type type, Eina_Bool skip, Evas_3D_Node_Func func, void *data); | 1634 | void evas_3d_node_tree_traverse(Evas_3D_Node *root, Evas_3D_Tree_Traverse_Type type, Eina_Bool skip, Evas_3D_Node_Func func, void *data); |
1630 | Eina_Bool evas_3d_node_mesh_collect(Evas_3D_Node *node, void *data); | 1635 | Eina_Bool evas_3d_node_mesh_collect(Evas_3D_Node *node, void *data); |
1636 | Eina_Bool evas_3d_node_color_node_mesh_collect(Evas_3D_Node *node, void *data); | ||
1631 | Eina_Bool evas_3d_node_light_collect(Evas_3D_Node *node, void *data); | 1637 | Eina_Bool evas_3d_node_light_collect(Evas_3D_Node *node, void *data); |
1632 | void evas_3d_node_scene_root_add(Evas_3D_Node *node, Evas_3D_Scene *scene); | 1638 | void evas_3d_node_scene_root_add(Evas_3D_Node *node, Evas_3D_Scene *scene); |
1633 | void evas_3d_node_scene_root_del(Evas_3D_Node *node, Evas_3D_Scene *scene); | 1639 | void evas_3d_node_scene_root_del(Evas_3D_Node *node, Evas_3D_Scene *scene); |