evas/evas3d: don't be crash when it's running on sw backened.

It doesn't have a plan that evas3d supports sw backened in the near future,
let it prenvent engine function access in case of sw backened.
This commit is contained in:
ChunEon Park 2014-05-07 16:23:53 +09:00
parent 2bbba9bec9
commit 8e9657ebb6
2 changed files with 84 additions and 30 deletions

View File

@ -169,7 +169,8 @@ _texture_fini(Evas_3D_Texture *obj)
if (pd->engine_data)
{
Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CLASS);
e->engine.func->texture_free(e->engine.data.output, pd->engine_data);
if (e->engine.func->texture_free)
e->engine.func->texture_free(e->engine.data.output, pd->engine_data);
pd->engine_data = NULL;
}
@ -214,7 +215,11 @@ _evas_3d_texture_evas_3d_object_update_notify(Eo *obj, Evas_3D_Texture_Data *pd)
if (pd->engine_data == NULL)
{
pd->engine_data = e->engine.func->texture_new(e->engine.data.output);
if (e->engine.func->texture_new)
{
pd->engine_data =
e->engine.func->texture_new(e->engine.data.output);
}
if (pd->engine_data == NULL)
{
@ -225,8 +230,12 @@ _evas_3d_texture_evas_3d_object_update_notify(Eo *obj, Evas_3D_Texture_Data *pd)
if (src->proxy->surface && !src->proxy->redraw)
{
e->engine.func->texture_image_set(e->engine.data.output, pd->engine_data,
src->proxy->surface);
if (e->engine.func->texture_image_set)
{
e->engine.func->texture_image_set(e->engine.data.output,
pd->engine_data,
src->proxy->surface);
}
return;
}
@ -234,8 +243,10 @@ _evas_3d_texture_evas_3d_object_update_notify(Eo *obj, Evas_3D_Texture_Data *pd)
pd->proxy_rendering = EINA_TRUE;
_texture_proxy_subrender(obj);
e->engine.func->texture_image_set(e->engine.data.output, pd->engine_data,
src->proxy->surface);
if (e->engine.func->texture_image_set)
e->engine.func->texture_image_set(e->engine.data.output,
pd->engine_data,
src->proxy->surface);
pd->proxy_rendering = EINA_FALSE;
}
}
@ -316,11 +327,12 @@ _evas_3d_texture_data_set(Eo *obj EINA_UNUSED, Evas_3D_Texture_Data *pd, Evas_3D
eo_do(obj, evas = evas_common_evas_get());
Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CLASS);
if (pd->engine_data == NULL)
if (!pd->engine_data && e->engine.func->texture_new)
pd->engine_data = e->engine.func->texture_new(e->engine.data.output);
e->engine.func->texture_data_set(e->engine.data.output, pd->engine_data,
color_format, pixel_format, w, h, data);
if (e->engine.func->texture_data_set)
e->engine.func->texture_data_set(e->engine.data.output, pd->engine_data,
color_format, pixel_format, w, h, data);
eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_TEXTURE_DATA, NULL));
}
@ -332,10 +344,13 @@ _evas_3d_texture_file_set(Eo *obj, Evas_3D_Texture_Data *pd, const char *file, c
eo_do(obj, evas = evas_common_evas_get());
Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CLASS);
if (pd->engine_data == NULL)
if (!pd->engine_data && e->engine.func->texture_new)
pd->engine_data = e->engine.func->texture_new(e->engine.data.output);
e->engine.func->texture_file_set(e->engine.data.output, pd->engine_data, file, key);
if (e->engine.func->texture_file_set)
e->engine.func->texture_file_set(e->engine.data.output, pd->engine_data,
file, key);
eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_TEXTURE_DATA, NULL));
}
@ -419,7 +434,11 @@ _evas_3d_texture_color_format_get(Eo *obj EINA_UNUSED, Evas_3D_Texture_Data *pd)
Eo *evas = NULL;
eo_do(obj, evas = evas_common_evas_get());
Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CLASS);
e->engine.func->texture_color_format_get(e->engine.data.output, pd->engine_data, &format);
if (e->engine.func->texture_color_format_get)
{
e->engine.func->texture_color_format_get(e->engine.data.output,
pd->engine_data, &format);
}
return format;
}
@ -429,7 +448,11 @@ _evas_3d_texture_size_get(Eo *obj, Evas_3D_Texture_Data *pd, int *w, int *h)
Eo *evas = NULL;
eo_do(obj, evas = evas_common_evas_get());
Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CLASS);
e->engine.func->texture_size_get(e->engine.data.output, pd->engine_data, w, h);
if (e->engine.func->texture_size_get)
{
e->engine.func->texture_size_get(e->engine.data.output,
pd->engine_data, w, h);
}
}
EOLIAN static void
@ -438,7 +461,11 @@ _evas_3d_texture_wrap_set(Eo *obj, Evas_3D_Texture_Data *pd, Evas_3D_Wrap_Mode s
Eo *evas = NULL;
eo_do(obj, evas = evas_common_evas_get());
Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CLASS);
e->engine.func->texture_wrap_set(e->engine.data.output, pd->engine_data, s, t);
if (e->engine.func->texture_wrap_set)
{
e->engine.func->texture_wrap_set(e->engine.data.output,
pd->engine_data, s, t);
}
eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_TEXTURE_WRAP, NULL));
}
@ -448,7 +475,11 @@ _evas_3d_texture_wrap_get(Eo *obj, Evas_3D_Texture_Data *pd, Evas_3D_Wrap_Mode *
Eo *evas = NULL;
eo_do(obj, evas = evas_common_evas_get());
Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CLASS);
e->engine.func->texture_wrap_get(e->engine.data.output, pd->engine_data, s, t);
if (e->engine.func->texture_wrap_set)
{
e->engine.func->texture_wrap_get(e->engine.data.output,
pd->engine_data, s, t);
}
}
EOLIAN static void
@ -457,7 +488,11 @@ _evas_3d_texture_filter_set(Eo *obj, Evas_3D_Texture_Data *pd, Evas_3D_Texture_F
Eo *evas = NULL;
eo_do(obj, evas = evas_common_evas_get());
Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CLASS);
e->engine.func->texture_filter_set(e->engine.data.output, pd->engine_data, min, mag);
if (e->engine.func->texture_filter_set)
{
e->engine.func->texture_filter_set(e->engine.data.output,
pd->engine_data, min, mag);
}
eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_TEXTURE_FILTER, NULL));
}
@ -467,7 +502,11 @@ _evas_3d_texture_filter_get(Eo *obj EINA_UNUSED, Evas_3D_Texture_Data *pd, Evas_
Eo *evas = NULL;
eo_do(obj, evas = evas_common_evas_get());
Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CLASS);
e->engine.func->texture_filter_get(e->engine.data.output, pd->engine_data, min, mag);
if (e->engine.func->texture_filter_get)
{
e->engine.func->texture_filter_get(e->engine.data.output,
pd->engine_data, min, mag);
}
}
#include "canvas/evas_3d_texture.eo.c"

View File

@ -2520,12 +2520,18 @@ _3d_render(Evas *eo_e, Evas_Object *eo_obj EINA_UNUSED,
{
int w, h;
e->engine.func->drawable_size_get(e->engine.data.output,
pd_scene->surface, &w, &h);
if (e->engine.func->drawable_size_get)
{
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);
if (e->engine.func->drawable_free)
{
e->engine.func->drawable_free(e->engine.data.output,
pd_scene->surface);
}
pd_scene->surface = NULL;
need_native_set = EINA_TRUE;
}
@ -2533,9 +2539,12 @@ _3d_render(Evas *eo_e, Evas_Object *eo_obj EINA_UNUSED,
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);
if (e->engine.func->drawable_new)
{
pd_scene->surface =
e->engine.func->drawable_new(e->engine.data.output,
pd_scene->w, pd_scene->h, 1);
}
need_native_set = EINA_TRUE;
}
@ -2544,10 +2553,13 @@ _3d_render(Evas *eo_e, Evas_Object *eo_obj EINA_UNUSED,
{
if (need_native_set)
{
data->surface =
e->engine.func->image_drawable_set(e->engine.data.output,
data->surface,
pd_scene->surface);
if (e->engine.func->image_drawable_set)
{
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;
@ -2573,8 +2585,11 @@ _3d_render(Evas *eo_e, Evas_Object *eo_obj EINA_UNUSED,
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);
if (e->engine.func->drawable_scene_render)
{
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);
}