Evas_Image_Load_Opts *lo)
{
if (o->cur->source) _proxy_unset(eo_obj, obj, o);
-
if (o->cur->scene) _3d_unset(eo_obj, obj, o);
EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
{
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJ_CLASS);
- if (o->cur->scene == scene)
- return;
+ if (o->cur->scene == scene) return;
_evas_object_image_cleanup(eo_obj, obj, o);
{
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJ_CLASS);
Evas_Image_Data *o = eo_data_scope_get(eo_obj, MY_CLASS);
- Evas_3D_Scene_Data *pd_scene = eo_data_scope_get(scene, EO_EVAS_3D_SCENE_CLASS);
-
- evas_object_image_file_set(eo_obj, NULL, NULL);
-
- EINA_COW_WRITE_BEGIN(evas_object_3d_cow, obj->data_3d, Evas_Object_3D_Data, data)
+ Evas_3D_Scene_Data *pd_scene = eo_data_scope_get(scene,
+ EO_EVAS_3D_SCENE_CLASS);
+ EINA_COW_WRITE_BEGIN(evas_object_3d_cow, obj->data_3d, Evas_Object_3D_Data,
+ data)
{
data->surface = NULL;
data->w = 0;
}
static void
-_3d_unset(Evas_Object *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj, Evas_Image_Data *o)
+_3d_unset(Evas_Object *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj,
+ Evas_Image_Data *o)
{
+ Evas_Public_Data *e;
+
if (!o->cur->scene) return;
- if (o->cur->scene)
+ Evas_3D_Scene_Data *pd_scene =
+ eo_data_scope_get(o->cur->scene, EO_EVAS_3D_SCENE_CLASS);
+
+ EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
{
- Evas_3D_Scene_Data *pd_scene = eo_data_scope_get(o->cur->scene, EO_EVAS_3D_SCENE_CLASS);
- EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
- pd_scene->images = eina_list_remove(pd_scene->images, eo_obj);
- eo_unref(state_write->scene);
- state_write->scene = NULL;
- EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
+ pd_scene->images = eina_list_remove(pd_scene->images, eo_obj);
+ eo_unref(state_write->scene);
+ state_write->scene = NULL;
}
+ EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
if (o->cur->defmap)
{
EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
}
- EINA_COW_WRITE_BEGIN(evas_object_3d_cow, obj->data_3d, Evas_Object_3D_Data, data)
+ EINA_COW_WRITE_BEGIN(evas_object_3d_cow, obj->data_3d, Evas_Object_3D_Data,
+ data)
{
+ e = obj->layer->evas;
+
if (data->surface)
- {
- obj->layer->evas->engine.func->image_free(obj->layer->evas->engine.data.output,
- data->surface);
- }
+ e->engine.func->image_free(e->engine.data.output, data->surface);
data->surface = NULL;
data->w = 0;
data->h = 0;
}
EINA_COW_WRITE_END(evas_object_3d_cow, obj->data_3d, data);
-
}
static void
-_3d_render(Evas *eo_e, Evas_Object *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj, Evas_Image_Data *o EINA_UNUSED, Evas_3D_Scene *scene)
+_3d_render(Evas *eo_e, Evas_Object *eo_obj EINA_UNUSED,
+ Evas_Object_Protected_Data *obj, Evas_Image_Data *o EINA_UNUSED,
+ Evas_3D_Scene *scene)
{
- Evas_Public_Data *e;
- Eina_Bool need_native_set = EINA_FALSE;
- Evas_3D_Scene_Public_Data scene_data;
+ Evas_Public_Data *e;
+ Eina_Bool need_native_set = EINA_FALSE;
+ Evas_3D_Scene_Public_Data scene_data;
+ Evas_3D_Scene_Data *pd_scene = NULL;
- if (scene == NULL)
- return;
- Evas_3D_Scene_Data *pd_scene = eo_data_scope_get(scene, EO_EVAS_3D_SCENE_CLASS);
+ pd_scene = eo_data_scope_get(scene, EO_EVAS_3D_SCENE_CLASS);
- if((pd_scene->w == 0) || (pd_scene->h == 0))
- return;
+ if((pd_scene->w == 0) || (pd_scene->h == 0)) return;
e = eo_data_scope_get(eo_e, EVAS_CLASS);
- if (pd_scene->surface != NULL)
+ if (pd_scene->surface)
{
int w, h;
- e->engine.func->drawable_size_get(e->engine.data.output, pd_scene->surface, &w, &h);
-
+ e->engine.func->drawable_size_get(e->engine.data.output,
+ pd_scene->surface, &w, &h);
if ((w != pd_scene->w) || (h != pd_scene->h))
{
- e->engine.func->drawable_free(e->engine.data.output, pd_scene->surface);
+ e->engine.func->drawable_free(e->engine.data.output,
+ pd_scene->surface);
pd_scene->surface = NULL;
need_native_set = EINA_TRUE;
}
}
-
- if (pd_scene->surface == NULL)
+ else
{
/* TODO: Hard-coded alpha on. */
- pd_scene->surface = e->engine.func->drawable_new(e->engine.data.output,
- pd_scene->w, pd_scene->h, 1);
+ pd_scene->surface =
+ e->engine.func->drawable_new(e->engine.data.output,
+ pd_scene->w, pd_scene->h, 1);
need_native_set = EINA_TRUE;
}
- EINA_COW_WRITE_BEGIN(evas_object_3d_cow, obj->data_3d, Evas_Object_3D_Data, data)
+ EINA_COW_WRITE_BEGIN(evas_object_3d_cow, obj->data_3d, Evas_Object_3D_Data,
+ data)
{
if (need_native_set)
{
- data->surface = e->engine.func->image_drawable_set(e->engine.data.output,
- data->surface, pd_scene->surface);
+ data->surface =
+ e->engine.func->image_drawable_set(e->engine.data.output,
+ data->surface,
+ pd_scene->surface);
}
-
data->w = pd_scene->w;
data->h = pd_scene->h;
}
evas_3d_object_update(scene);
/* Phase 2 - Do frustum culling and get visible model nodes. */
- evas_3d_node_tree_traverse(pd_scene->root_node, EVAS_3D_TREE_TRAVERSE_LEVEL_ORDER, EINA_TRUE,
+ evas_3d_node_tree_traverse(pd_scene->root_node,
+ EVAS_3D_TREE_TRAVERSE_LEVEL_ORDER, EINA_TRUE,
evas_3d_node_mesh_collect, &scene_data);
/* Phase 3 - Collect active light nodes in the scene graph tree. */
- evas_3d_node_tree_traverse(pd_scene->root_node, EVAS_3D_TREE_TRAVERSE_ANY_ORDER, EINA_FALSE,
+ evas_3d_node_tree_traverse(pd_scene->root_node,
+ EVAS_3D_TREE_TRAVERSE_ANY_ORDER, EINA_FALSE,
evas_3d_node_light_collect, &scene_data);
/* Phase 5 - Draw the scene. */
- e->engine.func->drawable_scene_render(e->engine.data.output, pd_scene->surface, &scene_data);
-
+ e->engine.func->drawable_scene_render(e->engine.data.output,
+ pd_scene->surface, &scene_data);
/* Clean up temporary resources. */
evas_3d_scene_data_fini(&scene_data);
}
(o->cur->source ?
eo_data_scope_get(o->cur->source, EVAS_OBJ_CLASS):
NULL);
-#ifdef EVAS_3D
+
if (o->cur->scene)
{
_3d_render(obj->layer->evas->evas, eo_obj, obj, o, o->cur->scene);
uvh = imageh;
}
else if (!o->cur->source)
-#else
- if (!o->cur->source)
-#endif
{
pixels = o->engine_data;
imagew = o->cur->image.w;