Model_save_load. Step 12. Evas 3d mesh is inherited from Efl.File. (functions file_set and save)

This commit is contained in:
Bogdan Devichev 2014-12-22 16:16:19 +02:00
parent 5adf8c44d9
commit d347ff43ae
11 changed files with 57 additions and 68 deletions

View File

@ -226,8 +226,8 @@ main(void)
mesh = eo_add(EVAS_3D_MESH_CLASS, evas);
material = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
evas_3d_mesh_file_set(mesh, "sonic.md2", NULL);
eo_do(mesh,
evas_3d_mesh_file_set("sonic.md2", NULL),
evas_3d_mesh_frame_material_set(0, material),
evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG));

View File

@ -150,8 +150,9 @@ main(void)
mesh2 = eo_add(EVAS_3D_MESH_CLASS, evas);
material = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
evas_3d_mesh_file_set(mesh, "sonic.md2", NULL);
eo_do(mesh,
evas_3d_mesh_file_set("sonic.md2", NULL),
evas_3d_mesh_frame_material_set(0, material),
evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG));
@ -168,11 +169,10 @@ main(void)
0.50, 0.00, 0.50, 0.30),
evas_3d_material_shininess_set(50.0));
eo_do(mesh,
evas_3d_mesh_save("saved_Sonic_EET.eet", NULL));
evas_3d_mesh_save(mesh, "saved_Sonic_EET.eet", NULL, NULL);
evas_3d_mesh_file_set(mesh2, "saved_Sonic_EET.eet", NULL);
eo_do(mesh2,
evas_3d_mesh_file_set("saved_Sonic_EET.eet", NULL),
evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG));
mesh_node = eo_add(EVAS_3D_NODE_CLASS, evas,

View File

@ -174,8 +174,8 @@ _mesh_setup_model(Scene_Data *data)
evas_3d_material_texture_set( EVAS_3D_MATERIAL_DIFFUSE, data->texture_model),
evas_3d_material_shininess_set(100.0));
evas_3d_mesh_file_set(data->mesh_model, "eagle.md2", NULL);
eo_do(data->mesh_model,
evas_3d_mesh_file_set("eagle.md2", NULL),
evas_3d_mesh_frame_material_set(0, data->material_model),
evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_DIFFUSE));
}

View File

@ -119,8 +119,9 @@ main(void)
mesh = eo_add(EVAS_3D_MESH_CLASS, evas);
material = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
evas_3d_mesh_file_set(mesh, "sonic.md2", NULL);
eo_do(mesh,
evas_3d_mesh_file_set("sonic.md2", NULL),
evas_3d_mesh_frame_material_set(0, material),
evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG));

View File

@ -7,7 +7,7 @@
* and geometry to "saved_man.obj".
*
* @verbatim
* gcc -o evas-3d-obj evas-3d-obj.c `pkg-config --libs --cflags evas ecore ecore-evas`
* gcc -o evas-3d-obj evas-3d-obj.c `pkg-config --libs --cflags evas ecore ecore-evas eo`
* @endverbatim
*/
@ -133,8 +133,8 @@ main(void)
mesh = eo_add(EVAS_3D_MESH_CLASS, evas);
material = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
evas_3d_mesh_file_set(mesh, "man_mesh.obj", NULL);
eo_do(mesh,
evas_3d_mesh_file_set("man_mesh.obj", NULL),
evas_3d_mesh_frame_material_set(0, material),
evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG));
@ -159,7 +159,7 @@ main(void)
1.0, 1.0, 1.0, 1.0),
evas_3d_material_shininess_set(50.0));
eo_do(mesh, evas_3d_mesh_save("saved_man.obj", NULL));
evas_3d_mesh_save(mesh, "saved_man.obj", NULL);
mesh_node = eo_add(EVAS_3D_NODE_CLASS, evas,
evas_3d_node_constructor(EVAS_3D_NODE_TYPE_MESH));

View File

@ -187,20 +187,22 @@ main(void)
for (i = 0; i < NUMBER_OF_MESHES; i++)
{
mesh[i] = eo_add(EVAS_3D_MESH_CLASS, evas);
evas_3d_mesh_file_set(mesh[i], path_file[i % 8], NULL);
eo_do(mesh[i],
evas_3d_mesh_file_set(path_file[i % 8], NULL),
evas_3d_mesh_frame_material_set(0, material),
evas_3d_mesh_shade_mode_set(draw_mode[(i % 16) / 8]));
snprintf(buffer, PATH_MAX, "%s/Saved_%s", folder, file_name[i % 8]);
eo_do(mesh[i], evas_3d_mesh_save(buffer, NULL));
evas_3d_mesh_save(mesh[i], buffer, NULL, NULL);
if (i > 15)
eo_do(mesh[i],
evas_3d_mesh_file_set(path_file[i % 8], NULL),
evas_3d_mesh_frame_material_set(0, material),
evas_3d_mesh_shade_mode_set(draw_mode[(i % 16) / 8]));
{
evas_3d_mesh_file_set(mesh[i], path_file[i % 8], NULL);
eo_do(mesh[i],
evas_3d_mesh_frame_material_set(0, material),
evas_3d_mesh_shade_mode_set(draw_mode[(i % 16) / 8]));
}
mesh_node[i] = eo_add(EVAS_3D_NODE_CLASS, evas,
evas_3d_node_constructor(EVAS_3D_NODE_TYPE_MESH));
@ -234,7 +236,7 @@ main(void)
/* Set the image object as render target for 3D scene. */
eo_do(image, evas_obj_image_scene_set(scene));
ecore_animator_frametime_set(0.01);
ecore_animator_frametime_set(0.03);
for (i = 0; i < NUMBER_OF_MESHES; i++)
anim = ecore_animator_add(_animate_scene, mesh_node[i]);

View File

@ -218,8 +218,8 @@ main(void)
mesh = eo_add(EVAS_3D_MESH_CLASS, evas);
material = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
evas_3d_mesh_file_set(mesh, "sonic.md2", NULL);
eo_do(mesh,
evas_3d_mesh_file_set("sonic.md2", NULL),
evas_3d_mesh_frame_material_set(0, material),
evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG));

View File

@ -840,8 +840,7 @@ _mesh_setup_gun_planet(Scene_Data *data)
/* Setup material and texture for eagle. */
data->mesh_eagle = eo_add(EVAS_3D_MESH_CLASS, evas);
eo_do(data->mesh_eagle,
evas_3d_mesh_file_set("shooter/eagle.obj", NULL));
evas_3d_mesh_file_set(data->mesh_eagle, "shooter/eagle.obj", NULL);
data->material_eagle = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
@ -1294,8 +1293,7 @@ _mesh_setup_warrior(Scene_Data *data, int index)
{
data->mesh_level[index] = eo_add(EVAS_3D_MESH_CLASS, evas);
eo_do(data->mesh_level[index],
evas_3d_mesh_file_set("shooter/warrior.md2", NULL));
evas_3d_mesh_file_set(data->mesh_level[index], "shooter/warrior.md2", NULL);
data->material_level = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
eo_do(data->mesh_level[index],
@ -1328,8 +1326,7 @@ void
_mesh_setup_snake(Scene_Data *data)
{
data->mesh_snake = eo_add(EVAS_3D_MESH_CLASS, evas);
eo_do(data->mesh_snake,
evas_3d_mesh_file_set("shooter/snake.md2", NULL));
evas_3d_mesh_file_set(data->mesh_snake, "shooter/snake.md2", NULL);
data->material_snake = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
eo_do(data->mesh_snake,

View File

@ -781,33 +781,38 @@ _evas_3d_mesh_mmap_set(Eo *obj, Evas_3D_Mesh_Data *pd,
evas_common_load_model_from_eina_file(obj, file);
}
EOLIAN static void
_evas_3d_mesh_file_set(Eo *obj, Evas_3D_Mesh_Data *pd,
const char *file, const char *key EINA_UNUSED)
EOLIAN static Eina_Bool
_evas_3d_mesh_efl_file_file_set(Eo *obj, Evas_3D_Mesh_Data *pd,
const char *file,
const char *key EINA_UNUSED)
{
_mesh_fini(pd);
_mesh_init(pd);
if (file == NULL) return;
if (file == NULL) return EINA_FALSE;
evas_common_load_model_from_file(obj, file);
return EINA_TRUE;
}
EOLIAN static void
_evas_3d_mesh_save(Eo *obj, Evas_3D_Mesh_Data *pd,
const char *file, const char *key EINA_UNUSED)
EOLIAN static Eina_Bool
_evas_3d_mesh_efl_file_save(Eo *obj, Evas_3D_Mesh_Data *pd,
const char *file,
const char *key EINA_UNUSED,
const char *flags EINA_UNUSED)
{
if ((file == NULL) || (obj == NULL) || (pd == NULL)) return;
if ((file == NULL) || (obj == NULL) || (pd == NULL)) return EINA_FALSE;
Evas_3D_Mesh_Frame *f = evas_3d_mesh_frame_find(pd, 0);
if (f == NULL)
{
ERR("Not existing mesh frame.");
return;
return EINA_FALSE;
}
evas_common_save_model_to_file(obj, file, f);
return EINA_TRUE;
}
static inline void
@ -926,4 +931,16 @@ evas_3d_mesh_interpolate_vertex_buffer_get(Evas_3D_Mesh *mesh, int frame,
}
}
EAPI void
evas_3d_mesh_file_set(Eo *obj, const char *file, const char *key)
{
eo_do((Eo *) obj, efl_file_set(file, key));
}
EAPI Eina_Bool
evas_3d_mesh_save(const Eo *obj, const char *file, const char *key, const char *flags)
{
return eo_do((Eo *) obj, efl_file_save(file, key, flags));
}
#include "canvas/evas_3d_mesh.eo.c"

View File

@ -1,4 +1,4 @@
class Evas_3D_Mesh (Evas_3D_Object, Evas.Common_Interface)
class Evas_3D_Mesh (Evas_3D_Object, Evas.Common_Interface, Efl.File)
{
legacy_prefix: null;
data: Evas_3D_Mesh_Data;
@ -19,36 +19,6 @@ class Evas_3D_Mesh (Evas_3D_Object, Evas.Common_Interface)
}
}
file_set {
/**
* Load mesh data from file.
*
* Loading a mesh from existing file is supported. Currently, only MD2, OBJ, PLY and EET file
* formats are supported.
*
* @ingroup Evas_3D_Mesh
*/
params {
@in const(char)* file; /*@ Path to the mesh file. */
@in const(char)* key; /*@ Key in the mesh file. */
}
}
save {
/**
* Save mesh data to file.
*
* Saving a mesh to file is supported. Currently, only OBJ, PLY and EET file
* format are supported.
*
* @ingroup Evas_3D_Mesh
*/
params {
@in const(char)* file; /*@ Path to the mesh file. */
@in const(char)* key; /*@ Key in the mesh file. */
}
}
frame_vertex_data_set {
/*@
Set the vertex data of the key frame of the given mesh.
@ -450,6 +420,8 @@ class Evas_3D_Mesh (Evas_3D_Object, Evas.Common_Interface)
Eo.Base.destructor;
Evas_3D_Object.update_notify;
Evas_3D_Object.change_notify;
Efl.File.file.set;
Efl.File.save;
}
}

View File

@ -43,13 +43,13 @@
fail_if(mesh == NULL); \
fail_if(mesh2 == NULL); \
snprintf(buffer, PATH_MAX, "%s", ext); \
eo_do(mesh, evas_3d_mesh_file_set(file->path, NULL)); \
eo_do(mesh, evas_3d_mesh_save(buffer, NULL)); \
eo_do(mesh2, evas_3d_mesh_file_set(buffer, NULL)); \
evas_3d_mesh_file_set(mesh, file->path, NULL); \
evas_3d_mesh_save(mesh, buffer, NULL, NULL); \
evas_3d_mesh_file_set(mesh2, buffer, NULL); \
res = _compare_meshes(mesh, mesh2); \
fail_if(res == 1); \
eo_do(mesh, evas_3d_mesh_mmap_set(eina_file_open(file->path, 0), NULL)); \
eo_do(mesh, evas_3d_mesh_save(buffer, NULL)); \
evas_3d_mesh_save(mesh, buffer, NULL, NULL); \
eo_do(mesh2, evas_3d_mesh_mmap_set(eina_file_open(buffer, 0), NULL)); \
res = _compare_meshes(mesh, mesh2); \
fail_if(res == 1); \