cedric pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=0dd60ced443f087a142a8fd0f5664af732a9b029
commit 0dd60ced443f087a142a8fd0f5664af732a9b029 Author: perepelits.m <perepelit...@samsung.com> Date: Sun Oct 4 16:37:17 2015 +0200 evas-3d: fix primitives Summary: There were warnings after adding primitive in the same frame more then once, the check was added to avoid it @fix Reviewers: cedric, raster, Hermet Subscribers: cedric, artem.popov Differential Revision: https://phab.enlightenment.org/D3090 Signed-off-by: Cedric BAIL <ced...@osg.samsung.com> --- src/lib/evas/canvas/evas_canvas3d_mesh.c | 11 +++++++++++ src/lib/evas/canvas/evas_canvas3d_mesh.eo | 8 ++++++++ src/lib/evas/common3d/primitives/primitive_common.h | 14 ++++++++++++-- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/lib/evas/canvas/evas_canvas3d_mesh.c b/src/lib/evas/canvas/evas_canvas3d_mesh.c index 892ecd1..e7bc091 100644 --- a/src/lib/evas/canvas/evas_canvas3d_mesh.c +++ b/src/lib/evas/canvas/evas_canvas3d_mesh.c @@ -306,6 +306,17 @@ _evas_canvas3d_mesh_vertex_count_get(Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Dat return pd->vertex_count; } +EOLIAN static Eina_Bool +_evas_canvas3d_mesh_frame_exist(Eo *obj EINA_UNUSED, Evas_Canvas3D_Mesh_Data *pd, int frame) +{ + Evas_Canvas3D_Mesh_Frame *f = evas_canvas3d_mesh_frame_find(pd, frame); + + if (f) + return EINA_TRUE; + + return EINA_FALSE; +} + EOLIAN static void _evas_canvas3d_mesh_frame_add(Eo *obj, Evas_Canvas3D_Mesh_Data *pd, int frame) { diff --git a/src/lib/evas/canvas/evas_canvas3d_mesh.eo b/src/lib/evas/canvas/evas_canvas3d_mesh.eo index aa1a23e..df01a85 100644 --- a/src/lib/evas/canvas/evas_canvas3d_mesh.eo +++ b/src/lib/evas/canvas/evas_canvas3d_mesh.eo @@ -156,6 +156,14 @@ class Evas.Canvas3D.Mesh (Evas.Canvas3D.Object, Evas.Common_Interface, Efl.File) ]] } + frame_exist { + [[Returns EINA_TRUE if frame was added and EINA_FALSE in other case.]] + params { + @in frame: int; [[Frame number.]] + } + return: Eina_Bool; + } + frame_add { [[Add a key frame to the given mesh. diff --git a/src/lib/evas/common3d/primitives/primitive_common.h b/src/lib/evas/common3d/primitives/primitive_common.h index 7f4e39d..50092d7 100644 --- a/src/lib/evas/common3d/primitives/primitive_common.h +++ b/src/lib/evas/common3d/primitives/primitive_common.h @@ -17,9 +17,14 @@ unsigned short *indices = malloc(sizeof(short) * icount); #define SET_VERTEX_DATA(frame) \ + Eina_Bool frame_exist; \ + eo_do(mesh, \ + frame_exist = evas_canvas3d_mesh_frame_exist(frame)); \ + if (!frame_exist) \ + eo_do(mesh, \ + evas_canvas3d_mesh_frame_add(frame)); \ eo_do(mesh, \ evas_canvas3d_mesh_vertex_count_set(vcount), \ - evas_canvas3d_mesh_frame_add(frame), \ evas_canvas3d_mesh_index_data_copy_set(EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, \ icount, &indices[0])); \ _set_vec3_vertex_data(mesh, frame, vcount, vertices, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION); \ @@ -29,9 +34,14 @@ free(indices); #define SET_VERTEX_DATA_FROM_ARRAY(mesh, frame, varray, vcount, indices, icount) \ + Eina_Bool frame_exist; \ + eo_do(mesh, \ + frame_exist = evas_canvas3d_mesh_frame_exist(frame)); \ + if (!frame_exist) \ + eo_do(mesh, \ + evas_canvas3d_mesh_frame_add(frame)); \ eo_do(mesh, \ evas_canvas3d_mesh_vertex_count_set(vcount), \ - evas_canvas3d_mesh_frame_add(frame), \ evas_canvas3d_mesh_index_data_copy_set(EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, \ icount, &indices[0])); \ _set_vertex_data_from_array(mesh, frame, varray, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, \ --