On 23/02/15 16:30, Oleksandr Shcherbina wrote: > > [1]https://phab.enlightenment.org/D1811 > > [2]https://phab.enlightenment.org/D1956 > > Do you really see here broken indentation?
Please fix your mail client (again). Yes, specifically line 968 compared to 967, but I assume other lines are broken too. I don't have the time or the will to review this atm. -- Tom. > > > ------- Original Message ------- > > Sender : Tom Hacohen<tom.haco...@samsung.com> Senior Engineer/SRUK-Open > Source/Samsung Electronics > > Date : Feb 23, 2015 18:52 (GMT+03:00) > > Title : Re: [E-devel] [EGIT] [core/efl] master 25/27: evas: Evas_3D - > mechanism for finding node by color pick. > > > CODING CONVENTIONS AND COMMIT GUIDELINES!!! > Commit message should be: > evas 3d: mechanism... > Lines are too long. > Indentation is completely broken for this patch. > Please start rejecting patches. > -- > Tom. > On 11/02/15 17:50, Oleksandr Shcherbina wrote: > > cedric pushed a commit to branch master. > > > > > > http://git.enlightenment.org/core/efl.git/commit/?id=dc0b144cf09deba3a5a6fe7 > 46f0130b67b5bf64b > > > > commit dc0b144cf09deba3a5a6fe746f0130b67b5bf64b > > Author: Oleksandr Shcherbina > > Date: Wed Feb 11 17:44:42 2015 +0100 > > > > 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 > > --- > > src/lib/evas/Evas_Eo.h | 1 + > > src/lib/evas/canvas/evas_3d_mesh.c | 17 ++++++ > > src/lib/evas/canvas/evas_3d_mesh.eo | 21 +++++++ > > src/lib/evas/canvas/evas_3d_node.c | 71 +++++++++++++++++++++++ > > src/lib/evas/canvas/evas_3d_scene.c | 109 > +++++++++++++++++++++++++++++++++-- > > src/lib/evas/canvas/evas_3d_scene.eo | 21 +++++++ > > 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 8fa89b3..033ada2 100644 > > --- a/src/lib/evas/Evas_Eo.h > > +++ b/src/lib/evas/Evas_Eo.h > > @@ -468,6 +468,7 @@ typedef enum _Evas_3D_State > > EVAS_3D_STATE_SCENE_BACKGROUND_COLOR, > > EVAS_3D_STATE_SCENE_SIZE, > > EVAS_3D_STATE_SCENE_SHADOWS_ENABLED, > > + EVAS_3D_STATE_SCENE_UPDATED, > > > > EVAS_3D_STATE_TEXTURE_DATA = 1, > > 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 ddbf619..44304380 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) > > pd->blend_sfactor = EVAS_3D_BLEND_ONE; > > pd->blend_dfactor = EVAS_3D_BLEND_ZERO; > > pd->blending = EINA_FALSE; > > + > > + pd->color_pick_key = -1.0; > > + pd->color_pick_enabled = EINA_FALSE; > > } > > > > static inline void > > @@ -963,4 +966,18 @@ > evas_3d_mesh_interpolate_vertex_buffer_get(Evas_3D_Mesh *mesh, int frame, > > } > > } > > > > +EOLIAN static Eina_Bool > > +_evas_3d_mesh_color_pick_enable_get(Eo *obj EINA_UNUSED, > Evas_3D_Mesh_Data *pd) > > +{ > > + return pd->color_pick_enabled; > > +} > > +EOLIAN static Eina_Bool > > +_evas_3d_mesh_color_pick_enable_set(Eo *obj, Evas_3D_Mesh_Data *pd, > Eina_Bool _enabled) > > +{ > > + if (pd->color_pick_enabled != _enabled) > > + pd->color_pick_enabled = _enabled; > > + eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_COLOR_PICK, > NULL)); > > + return EINA_TRUE; > > +} > > + > > #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 5657b32..a23654a 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) > > params { > > } > > } > > + color_pick_enable_get @const { > > + /* > > + Get status of color picking of the mesh. > > + > > + @ingroup Evas_3D_Mesh > > + */ > > + return: bool; > > + params { > > + } > > + } > > + color_pick_enable_set { > > + /* > > + Set posibility color picking. > > + > > + @ingroup Evas_3D_Mesh > > + */ > > + return: bool; > > + params { > > + @in bool _enabled; /*@ Posibility flag */ > > + } > > + } > > } > > properties { > > shade_mode { > > diff --git a/src/lib/evas/canvas/evas_3d_node.c > b/src/lib/evas/canvas/evas_3d_node.c > > index a5355ed..62e2c1c 100644 > > --- a/src/lib/evas/canvas/evas_3d_node.c > > +++ b/src/lib/evas/canvas/evas_3d_node.c > > @@ -6,6 +6,27 @@ > > > > Evas_3D_Mesh_Frame *evas_3d_mesh_frame_find(Evas_3D_Mesh_Data *pd, int > frame); > > > > +static Eina_Stringshare * > > +_generate_unic_color_key(Evas_Color *color, Evas_Color *bg_color, > Evas_3D_Node *node, Evas_3D_Mesh *mesh, > > + Eina_Bool init) > > +{ > > + static unsigned short red = USHRT_MAX; > > + > > + if (init) red = USHRT_MAX; > > + > > + if (fabs(bg_color->r - (double)red) <= DBL_EPSILON) red--; > > + > > + color->r = (double)red / USHRT_MAX; > > + color->g = 0.0; > > + color->b = 0.0; > > + > > + red--; > > + > > + if (red < 1) red = USHRT_MAX; > > + > > + return eina_stringshare_printf("%p %p", node, mesh); > > +} > > + > > static inline Evas_3D_Node_Mesh * > > _node_mesh_new(Evas_3D_Node *node, Evas_3D_Mesh *mesh) > > { > > @@ -795,6 +816,56 @@ evas_3d_node_mesh_collect(Evas_3D_Node *node, void > *data) > > } > > > > Eina_Bool > > +evas_3d_node_color_node_mesh_collect(Evas_3D_Node *node, void *data) > > +{ > > + Evas_3D_Scene_Public_Data *scene_data = (Evas_3D_Scene_Public_Data > *)data; > > + Evas_3D_Node_Data *pd = eo_data_scope_get(node, MY_CLASS); > > + Evas_3D_Node_Data *pd_camera = > eo_data_scope_get(scene_data->camera_node, MY_CLASS); > > + Evas_3D_Camera *camera = > (Evas_3D_Camera*)pd_camera->data.camera.camera; > > + > > + Eina_List *list_meshes, *l; > > + Evas_3D_Mesh *mesh; > > + Eina_Stringshare *key, *datakey; > > + Evas_Color *color; > > + Eina_Bool visible = EINA_FALSE; > > + Eina_Array *arr; > > + if (pd->type == EVAS_3D_NODE_TYPE_MESH) > > + { > > + eo_do(camera, > > + visible = > evas_3d_camera_node_visible_get(scene_data->camera_node, > > + node, > EVAS_3D_FRUSTUM_MODE_BSPHERE)); > > + if (visible) > > + { > > + eo_do (node, list_meshes = (Eina_List > *)evas_3d_node_mesh_list_get()); > > + EINA_LIST_FOREACH(list_meshes, l, mesh) > > + { > > + if (eo_do(mesh, evas_3d_mesh_color_pick_enable_get())) > > + { > > + color = calloc(1, sizeof(Evas_Color)); > > + > > + if > (!eina_hash_population(scene_data->node_mesh_colors)) > > + key = _generate_unic_color_key(color, > &scene_data->bg_color, > > + node, mesh, > EINA_TRUE); > > + else > > + key = _generate_unic_color_key(color, > &scene_data->bg_color, > > + node, mesh, > EINA_FALSE); > > + > > + datakey = eina_stringshare_printf("%f %f %f", > color->r, color->g, color->b); > > + eina_hash_add(scene_data->node_mesh_colors, key, > color); > > + arr = eina_array_new(2); > > + eina_array_push(arr, (void *)node); > > + eina_array_push(arr, (void *)mesh); > > + eina_hash_add(scene_data->colors_node_mesh, > datakey, arr); > > + } > > + } > > + } > > + else > > + return EINA_FALSE; > > + } > > + return EINA_TRUE; > > +} > > + > > +Eina_Bool > > evas_3d_node_light_collect(Evas_3D_Node *node, void *data) > > { > > 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 0e177a7..a26b6c8 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) > > data->camera_node = NULL; > > data->light_nodes = NULL; > > data->mesh_nodes = NULL; > > + data->node_mesh_colors = NULL; > > + data->colors_node_mesh = NULL; > > } > > > > void > > @@ -46,6 +48,8 @@ _evas_3d_scene_evas_3d_object_update_notify(Eo *obj > EINA_UNUSED, Evas_3D_Scene_D > > { > > eo_do(pd->camera_node, evas_3d_object_update()); > > } > > + > > + eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_SCENE_UPDATED, > NULL)); > > } > > > > EAPI Evas_3D_Scene * > > @@ -65,6 +69,9 @@ _evas_3d_scene_eo_base_constructor(Eo *obj, > Evas_3D_Scene_Data *pd) > > eo_do(obj, evas_3d_object_type_set(EVAS_3D_OBJECT_TYPE_SCENE)); > > evas_color_set(&pd->bg_color, 0.0, 0.0, 0.0, 0.0); > > pd->shadows_enabled = EINA_FALSE; > > + pd->color_pick_enabled = EINA_FALSE; > > + pd->node_mesh_colors = NULL; > > + pd->colors_node_mesh = NULL; > > } > > > > EOLIAN static void > > @@ -608,17 +615,32 @@ _node_pick(Evas_3D_Node *node, void *data) > > return EINA_TRUE; > > } > > > > +static void _node_mesh_colors_free_cb(void *data) > > +{ > > + if (data) free(data); > > +} > > + > > EOLIAN static Eina_Bool > > _evas_3d_scene_pick(Eo *obj, Evas_3D_Scene_Data *pd, Evas_Real x, > Evas_Real y, > > Evas_3D_Node **node, Evas_3D_Mesh **mesh, > > Evas_Real *s, Evas_Real *t) > > { > > - /* TODO: Use H/W picking if availabe. */ > > Evas_3D_Pick_Data data; > > + Evas_3D_Node_Data *pd_camera_node; > > + Evas_3D_Camera_Data *pd_camera; > > + Evas_3D_Object_Data *pd_parent; > > + Evas_Public_Data *e; > > + int tex, px, py;; > > + double redcomponent; > > + Eina_Stringshare *tmp; > > + Eina_Array *arr = NULL; > > + Eina_Bool update_scene = EINA_FALSE; > > + > > + pd_parent = eo_data_scope_get(obj, EVAS_3D_OBJECT_CLASS); > > + e = eo_data_scope_get(pd_parent->evas, EVAS_CANVAS_CLASS); > > > > data.x = ((x * 2.0) / (Evas_Real)pd->w) - 1.0; > > data.y = (((pd->h - y - 1) * 2.0) / ((Evas_Real)pd->h)) - 1.0; > > - > > data.picked = EINA_FALSE; > > data.z = 1.0; > > data.node = NULL; > > @@ -626,17 +648,78 @@ _evas_3d_scene_pick(Eo *obj, Evas_3D_Scene_Data > *pd, > Evas_Real x, Evas_Real y, > > data.s = 0.0; > > data.t = 0.0; > > > > + px = round(x * pd->w / e->viewport.w); > > + py = round((pd->h - (y * pd->h / e->viewport.h) - 1)); > > + > > + /*Use color pick mechanism finding node and mesh*/ > > + if (pd->color_pick_enabled) > > + { > > + Evas_3D_Scene_Public_Data scene_data; > > + > > + scene_data.bg_color = pd->bg_color; > > + scene_data.shadows_enabled = pd->shadows_enabled; > > + scene_data.camera_node = pd->camera_node; > > + scene_data.color_pick_enabled = pd->color_pick_enabled; > > + update_scene = eo_do(obj, > evas_3d_object_dirty_get(EVAS_3D_STATE_SCENE_UPDATED)); > > + if (update_scene) > > + { > > + if (pd->node_mesh_colors) > > + { > > + eina_hash_free(pd->node_mesh_colors); > > + eina_hash_free(pd->colors_node_mesh); > > + pd->node_mesh_colors = NULL; > > + pd->colors_node_mesh = NULL; > > + } > > + pd->node_mesh_colors = > eina_hash_stringshared_new(_node_mesh_colors_free_cb); > > + pd->colors_node_mesh = > eina_hash_stringshared_new(_node_mesh_colors_free_cb); > > + } > > + scene_data.node_mesh_colors = pd->node_mesh_colors; > > + scene_data.colors_node_mesh = pd->colors_node_mesh; > > + evas_3d_node_tree_traverse(pd->root_node, > > + EVAS_3D_TREE_TRAVERSE_LEVEL_ORDER, > EINA_TRUE, > >+ evas_3d_node_color_node_mesh_collect, > &scene_data); > > + > > + if (e->engine.func->drawable_scene_render_to_texture) > > + { > > + if > (e->engine.func->drawable_scene_render_to_texture(e->engine.data.output, > > + pd->surface, > &scene_data)) > > + { > > + if > (e->engine.func->drawable_texture_color_pick_id_get) > > + tex = > e->engine.func->drawable_texture_color_pick_id_get(pd->surface); > > + if (e->engine.func->drawable_texture_pixel_color_get) > > + { > > + redcomponent = > e->engine.func->drawable_texture_pixel_color_get(tex, px, py, > pd->surface); > > + tmp = eina_stringshare_printf("%f %f %f", > redcomponent, 0.0, 0.0); > > + arr = (Eina_Array > *)eina_hash_find(pd->colors_node_mesh, tmp); > > + if (arr) > > + { > > + if (mesh) *mesh = (Evas_3D_Mesh > *)eina_array_data_get(arr, 1); > > + if (node) *node = (Evas_3D_Node > *)eina_array_data_get(arr, 0); > > + eina_stringshare_del(tmp); > > + > > + return EINA_TRUE; > > + } > > + else > > + { > > + eina_stringshare_del(tmp); > > + if (mesh) *mesh = NULL; > > + if (node) *node = NULL; > > + } > > + } > > + } > > + } > > + return EINA_FALSE; > > + } > > /* Update the scene graph. */ > > eo_do(obj, evas_3d_object_update()); > > - Evas_3D_Node_Data *pd_camera_node = > eo_data_scope_get(pd->camera_node, > EVAS_3D_NODE_CLASS); > > - Evas_3D_Camera_Data *pd_camera = > eo_data_scope_get(pd_camera_node->data.camera.camera, > EVAS_3D_CAMERA_CLASS); > > + pd_camera_node = eo_data_scope_get(pd->camera_node, > EVAS_3D_NODE_CLASS); > > + pd_camera = eo_data_scope_get(pd_camera_node->data.camera.camera, > EVAS_3D_CAMERA_CLASS); > > evas_mat4_multiply(&data.matrix_vp, > > &pd_camera->projection, > > > &pd_camera_node->data.camera.matrix_world_to_eye); > > > > evas_ray3_init(&data.ray_world, data.x, data.y, &data.matrix_vp); > > > > - > > /* Traverse tree while adding meshes into pick data structure. */ > > evas_3d_node_tree_traverse(pd->root_node, > EVAS_3D_TREE_TRAVERSE_LEVEL_ORDER, EINA_TRUE, > > _node_pick, &data); > > @@ -726,4 +809,20 @@ _evas_3d_scene_shadows_enable_set(Eo *obj > EINA_UNUSED, Evas_3D_Scene_Data *pd, E > > > eo_do(obj,evas_3d_object_change(EVAS_3D_STATE_SCENE_SHADOWS_ENABLED, > NULL)); > > } > > > > +EOLIAN static Eina_Bool > > +_evas_3d_scene_color_pick_enable_get(Eo *obj EINA_UNUSED, > Evas_3D_Scene_Data *pd) > > +{ > > + return pd->color_pick_enabled; > > +} > > + > > +EOLIAN static Eina_Bool > > +_evas_3d_scene_color_pick_enable_set(Eo *obj EINA_UNUSED, > Evas_3D_Scene_Data *pd, Eina_Bool _enabled) > > +{ > > + if (pd->color_pick_enabled != _enabled) > > + pd->color_pick_enabled = _enabled; > > + > > + eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_SCENE_UPDATED, > NULL)); > > + return EINA_TRUE; > > +} > > + > > #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 1078c02..bb25f90 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) > > params { > > } > > } > > + color_pick_enable_get @const { > > + /* > > + Get status of color picking of the scene. > > + > > + @ingroup Evas_3D_Scene > > + */ > > + return: bool; > > + params { > > + } > > + } > > + color_pick_enable_set { > > + /* > > + Set posibility color picking. > > + > > + @ingroup Evas_3D_Scene > > + */ > > + return: bool; > > + params { > > + @in bool color_pick; /*@ Posibility flag */ > > + } > > + } > > } > > properties { > > > > diff --git a/src/lib/evas/include/evas_private.h > b/src/lib/evas/include/evas_private.h > > index c07cfa3..ceab19d 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 > > Evas_3D_Node *root_node; > > Evas_3D_Node *camera_node; > > Evas_Color bg_color; > > + Eina_Bool shadows_enabled :1; > > + Eina_Bool color_pick_enabled :1; > > > > void *surface; > > int w, h; > > Eina_List *images; > > - Eina_Bool shadows_enabled :1; > > + > > + Eina_Hash *node_mesh_colors; > > + Eina_Hash *colors_node_mesh; > > }; > > > > struct _Evas_3D_Node_Mesh > > @@ -380,6 +384,7 @@ struct _Evas_3D_Scene_Public_Data > > Eina_List *mesh_nodes; > > Eina_Bool shadows_enabled :1; > > Eina_Bool color_pick_enabled :1; > > + > > Eina_Hash *node_mesh_colors; > > Eina_Hash *colors_node_mesh; > > }; > > @@ -1628,6 +1633,7 @@ void _canvas_smart_objects_calculate_count_get(Eo > *e, void *_pd, va_list *list); > > 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); > > 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); > > Eina_Bool evas_3d_node_mesh_collect(Evas_3D_Node *node, void *data); > > +Eina_Bool evas_3d_node_color_node_mesh_collect(Evas_3D_Node *node, void > *data); > > Eina_Bool evas_3d_node_light_collect(Evas_3D_Node *node, void *data); > > void evas_3d_node_scene_root_add(Evas_3D_Node *node, Evas_3D_Scene > *scene); > > void evas_3d_node_scene_root_del(Evas_3D_Node *node, Evas_3D_Scene > *scene); > > > * > > ---------------------------------------------------------------------------- > -- > Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server > from Actuate! Instantly Supercharge Your Business Reports and Dashboards > with Interactivity, Sharing, Native Excel Exports, App Integration & more > Get technology previously reserved for billion-dollar corporations, FREE > > http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > > > With best regards, > > Oleksander Shcherbina > > SRK-Tizen Platform Lab > > Samsung Ukraine R&D Institute > > 57 L'va Tolstogo Str., Kyiv 01032, Ukraine > > Mob.: +380 (66) 1297544 > > o.shcherb...@samsung.com > > > > > [cid:T9SZN3WZA6X7@namo.co.kr] > > > [SeenTimeChecker?do=0966c73de79aa0464bb17ed4340b993d4757d1278ede9eff28d6023d > > ffbae032ba777c355c197185c465c2cf80a2b7ef9aba4bb3b2b5ca43ddd7e184e0604d958075 > b6b33f32d245be7a12499853ada082afa00ff4b36e9acf878f9a26ce15a0] > > References > > 1. https://phab.enlightenment.org/D1811 > 2. https://phab.enlightenment.org/D1956 > > > > ------------------------------------------------------------------------------ > Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server > from Actuate! Instantly Supercharge Your Business Reports and Dashboards > with Interactivity, Sharing, Native Excel Exports, App Integration & more > Get technology previously reserved for billion-dollar corporations, FREE > http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk > > > > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > ------------------------------------------------------------------------------ Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server from Actuate! Instantly Supercharge Your Business Reports and Dashboards with Interactivity, Sharing, Native Excel Exports, App Integration & more Get technology previously reserved for billion-dollar corporations, FREE http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel