evas: move all image object related function to use the engine instead of the output.

This commit is contained in:
Cedric BAIL 2017-08-25 10:51:10 -07:00
parent 14f1a0bde7
commit 1d57cb2627
12 changed files with 197 additions and 214 deletions

View File

@ -20,7 +20,7 @@ _evas_image_mmap_set(Eo *eo_obj, const Eina_File *f, const char *key)
}
evas_object_async_block(obj);
_evas_image_init_set(f, NULL, key, eo_obj, obj, o, &lo);
o->engine_data = ENFN->image_mmap(ENDT, o->cur->u.f, o->cur->key, &o->load_error, &lo);
o->engine_data = ENFN->image_mmap(ENC, o->cur->u.f, o->cur->key, &o->load_error, &lo);
o->buffer_data_set = EINA_FALSE;
_evas_image_done_set(eo_obj, obj, o);
o->file_size.w = o->cur->image.w;
@ -83,7 +83,7 @@ _evas_image_file_set(Eo *eo_obj, const char *file, const char *key)
efl_vpath_file_wait(o->file_obj);
file2 = efl_vpath_file_result_get(o->file_obj);
}
o->engine_data = ENFN->image_load(ENDT, file2, o->cur->key, &o->load_error, &lo);
o->engine_data = ENFN->image_load(ENC, file2, o->cur->key, &o->load_error, &lo);
o->buffer_data_set = EINA_FALSE;
_evas_image_done_set(eo_obj, obj, o);
o->file_size.w = o->cur->image.w;
@ -156,7 +156,7 @@ _image_preload_internal(Eo *eo_obj, Evas_Image_Data *o, Eina_Bool cancel)
if (o->preloading)
{
o->preloading = EINA_FALSE;
ENFN->image_data_preload_cancel(ENDT, o->engine_data, eo_obj);
ENFN->image_data_preload_cancel(ENC, o->engine_data, eo_obj);
}
}
else
@ -164,7 +164,7 @@ _image_preload_internal(Eo *eo_obj, Evas_Image_Data *o, Eina_Bool cancel)
if (!o->preloading)
{
o->preloading = EINA_TRUE;
ENFN->image_data_preload_request(ENDT, o->engine_data, eo_obj);
ENFN->image_data_preload_request(ENC, o->engine_data, eo_obj);
}
}
}
@ -449,7 +449,7 @@ _evas_image_load_region_support_get(const Eo *eo_obj)
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS);
return ENFN->image_can_region_get(ENDT, o->engine_data);
return ENFN->image_can_region_get(ENC, o->engine_data);
}
EOLIAN static Eina_Bool
@ -639,7 +639,7 @@ _image_pixels_set(Evas_Object_Protected_Data *obj,
if (ENFN->image_data_maps_get)
{
if (ENFN->image_data_maps_get(ENDT, o->engine_data, NULL) > 0)
if (ENFN->image_data_maps_get(ENC, o->engine_data, NULL) > 0)
{
ERR("can not set pixels when there are open memory maps");
return EINA_FALSE;
@ -666,12 +666,12 @@ _image_pixels_set(Evas_Object_Protected_Data *obj,
int iw = 0, ih = 0;
Eina_Bool alpha;
ENFN->image_size_get(ENDT, o->engine_data, &iw, &ih);
ics = ENFN->image_colorspace_get(ENDT, o->engine_data);
alpha = ENFN->image_alpha_get(ENDT, o->engine_data);
ENFN->image_size_get(ENC, o->engine_data, &iw, &ih);
ics = ENFN->image_colorspace_get(ENC, o->engine_data);
alpha = ENFN->image_alpha_get(ENC, o->engine_data);
if ((w != iw) || (h != ih) || (ics != cspace) || (alpha != o->cur->has_alpha))
{
ENFN->image_free(ENDT, o->engine_data);
ENFN->image_free(ENC, o->engine_data);
o->engine_data = NULL;
}
}
@ -680,13 +680,13 @@ _image_pixels_set(Evas_Object_Protected_Data *obj,
{
// note: we release all planes at once
if (o->engine_data)
ENFN->image_free(ENDT, o->engine_data);
o->engine_data = ENFN->image_new_from_copied_data(ENDT, w, h, NULL, o->cur->has_alpha, cspace);
ENFN->image_free(ENC, o->engine_data);
o->engine_data = ENFN->image_new_from_copied_data(ENC, w, h, NULL, o->cur->has_alpha, cspace);
}
else
{
o->buffer_data_set = EINA_TRUE;
o->engine_data = ENFN->image_data_slice_add(ENDT, o->engine_data,
o->engine_data = ENFN->image_data_slice_add(ENC, o->engine_data,
slice, copy, w, h, stride,
cspace, plane, o->cur->has_alpha);
}
@ -701,13 +701,13 @@ _image_pixels_set(Evas_Object_Protected_Data *obj,
resized = EINA_TRUE;
if (ENFN->image_scale_hint_set)
ENFN->image_scale_hint_set(ENDT, o->engine_data, o->scale_hint);
ENFN->image_scale_hint_set(ENC, o->engine_data, o->scale_hint);
if (ENFN->image_content_hint_set)
ENFN->image_content_hint_set(ENDT, o->engine_data, o->content_hint);
ENFN->image_content_hint_set(ENC, o->engine_data, o->content_hint);
if (ENFN->image_stride_get)
ENFN->image_stride_get(ENDT, o->engine_data, &int_stride);
ENFN->image_stride_get(ENC, o->engine_data, &int_stride);
if (resized || o->cur->u.file || o->cur->key ||
(o->cur->image.stride != int_stride) || (cspace != o->cur->cspace))
@ -775,7 +775,7 @@ _efl_canvas_image_efl_gfx_buffer_buffer_managed_get(Eo *eo_obj, void *_pd EINA_U
if (!o->buffer_data_set || !o->engine_data || !ENFN->image_data_direct_get)
return EINA_FALSE;
return ENFN->image_data_direct_get(ENDT, o->engine_data, plane, slice, &cspace, EINA_FALSE);
return ENFN->image_data_direct_get(ENC, o->engine_data, plane, slice, &cspace, EINA_FALSE);
}
EOLIAN static Eina_Bool
@ -800,7 +800,7 @@ _efl_canvas_image_efl_gfx_buffer_buffer_map(Eo *eo_obj, void *_pd EINA_UNUSED,
goto end; // not implemented
if (o->engine_data)
ENFN->image_size_get(ENDT, o->engine_data, &width, &height);
ENFN->image_size_get(ENC, o->engine_data, &width, &height);
if (!o->engine_data || !width || !height)
{
@ -820,7 +820,7 @@ _efl_canvas_image_efl_gfx_buffer_buffer_map(Eo *eo_obj, void *_pd EINA_UNUSED,
goto end;
}
if (ENFN->image_data_map(ENDT, &o->engine_data, slice, &s, x, y, w, h, cspace, mode, plane))
if (ENFN->image_data_map(ENC, &o->engine_data, slice, &s, x, y, w, h, cspace, mode, plane))
{
DBG("map(%p, %d,%d %dx%d plane:%d) -> " EINA_SLICE_FMT,
eo_obj, x, y, w, h, plane, EINA_SLICE_PRINT(*slice));
@ -843,7 +843,7 @@ _efl_canvas_image_efl_gfx_buffer_buffer_unmap(Eo *eo_obj, void *_pd EINA_UNUSED,
if (!slice || !ENFN->image_data_unmap || !o->engine_data)
return EINA_FALSE;
if (!ENFN->image_data_unmap(ENDT, o->engine_data, slice))
if (!ENFN->image_data_unmap(ENC, o->engine_data, slice))
return EINA_FALSE;
return EINA_TRUE;

View File

@ -295,7 +295,7 @@ _efl_canvas_proxy_efl_gfx_buffer_buffer_map(Eo *eo_obj, void *_pd EINA_UNUSED,
image = _proxy_image_get(o);
if (image)
ENFN->image_size_get(ENDT, image, &width, &height);
ENFN->image_size_get(ENC, image, &width, &height);
if (!image || !width || !height)
{
@ -315,7 +315,7 @@ _efl_canvas_proxy_efl_gfx_buffer_buffer_map(Eo *eo_obj, void *_pd EINA_UNUSED,
goto end;
}
if (ENFN->image_data_map(ENDT, &o->engine_data, slice, &s, x, y, w, h, cspace, mode, plane))
if (ENFN->image_data_map(ENC, &o->engine_data, slice, &s, x, y, w, h, cspace, mode, plane))
{
DBG("map(%p, %d,%d %dx%d plane:%d) -> " EINA_SLICE_FMT,
eo_obj, x, y, w, h, plane, EINA_SLICE_PRINT(*slice));
@ -338,7 +338,7 @@ _efl_canvas_proxy_efl_gfx_buffer_buffer_unmap(Eo *eo_obj, void *_pd EINA_UNUSED,
if (!slice || !ENFN->image_data_unmap || !o->engine_data)
return EINA_FALSE;
if (!ENFN->image_data_unmap(ENDT, o->engine_data, slice))
if (!ENFN->image_data_unmap(ENC, o->engine_data, slice))
return EINA_FALSE;
return EINA_TRUE;

View File

@ -14,7 +14,7 @@ _efl_canvas_scene3d_scene3d_set(Eo *eo_obj, void *pd EINA_UNUSED, Evas_Canvas3D_
evas_object_async_block(obj);
_evas_image_init_set(NULL, NULL, NULL, eo_obj, obj, o, &lo);
o->engine_data = ENFN->image_load(ENDT, o->cur->u.file, o->cur->key, &o->load_error, &lo);
o->engine_data = ENFN->image_load(ENC, o->cur->u.file, o->cur->key, &o->load_error, &lo);
_evas_image_done_set(eo_obj, obj, o);
if (scene) _evas_image_3d_set(eo_obj, scene);

View File

@ -16,7 +16,7 @@ _efl_canvas_surface_tbm_efl_object_constructor(Eo *eo, Efl_Canvas_Surface_Tbm_Da
obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS);
if (!obj) return NULL;
if (!ENFN->image_native_init(ENDT, EVAS_NATIVE_SURFACE_TBM))
if (!ENFN->image_native_init(ENC, EVAS_NATIVE_SURFACE_TBM))
{
ERR("TBM is not supported on this platform");
return NULL;
@ -34,7 +34,7 @@ _efl_canvas_surface_tbm_efl_object_destructor(Eo *eo, Efl_Canvas_Surface_Tbm_Dat
obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS);
ENFN->image_native_shutdown(ENDT, EVAS_NATIVE_SURFACE_TBM);
ENFN->image_native_shutdown(ENC, EVAS_NATIVE_SURFACE_TBM);
efl_data_unref(eo, pd->base);
efl_destructor(eo);
}

View File

@ -16,7 +16,7 @@ _efl_canvas_surface_wayland_efl_object_constructor(Eo *eo, Efl_Canvas_Surface_Wa
obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS);
if (!obj) return NULL;
if (!ENFN->image_native_init(ENDT, EVAS_NATIVE_SURFACE_WL))
if (!ENFN->image_native_init(ENC, EVAS_NATIVE_SURFACE_WL))
{
ERR("Wayland surfaces are not supported on this platform");
return NULL;
@ -34,7 +34,7 @@ _efl_canvas_surface_wayland_efl_object_destructor(Eo *eo, Efl_Canvas_Surface_Way
obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS);
ENFN->image_native_shutdown(ENDT, EVAS_NATIVE_SURFACE_WL);
ENFN->image_native_shutdown(ENC, EVAS_NATIVE_SURFACE_WL);
efl_data_unref(eo, pd->base);
efl_destructor(eo);
}

View File

@ -17,7 +17,7 @@ _efl_canvas_surface_x11_efl_object_constructor(Eo *eo, Efl_Canvas_Surface_X11_Da
obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS);
if (!obj) return NULL;
if (!ENFN->image_native_init(ENDT, EVAS_NATIVE_SURFACE_X11))
if (!ENFN->image_native_init(ENC, EVAS_NATIVE_SURFACE_X11))
{
ERR("X11 is not supported on this platform");
return NULL;
@ -36,7 +36,7 @@ _efl_canvas_surface_x11_efl_object_destructor(Eo *eo, Efl_Canvas_Surface_X11_Dat
obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS);
ENFN->image_native_shutdown(ENDT, EVAS_NATIVE_SURFACE_X11);
ENFN->image_native_shutdown(ENC, EVAS_NATIVE_SURFACE_X11);
efl_data_unref(eo, pd->base);
efl_destructor(eo);
}

View File

@ -580,11 +580,11 @@ evas_object_image_data_set(Eo *eo_obj, void *data)
if (o->engine_data)
{
o->engine_data = ENFN->image_data_put(ENDT, o->engine_data, data);
o->engine_data = ENFN->image_data_put(ENC, o->engine_data, data);
}
else
{
o->engine_data = ENFN->image_new_from_data(ENDT,
o->engine_data = ENFN->image_new_from_data(ENC,
o->cur->image.w,
o->cur->image.h,
data,
@ -596,13 +596,13 @@ evas_object_image_data_set(Eo *eo_obj, void *data)
int stride = 0;
if (ENFN->image_scale_hint_set)
ENFN->image_scale_hint_set(ENDT, o->engine_data, o->scale_hint);
ENFN->image_scale_hint_set(ENC, o->engine_data, o->scale_hint);
if (ENFN->image_content_hint_set)
ENFN->image_content_hint_set(ENDT, o->engine_data, o->content_hint);
ENFN->image_content_hint_set(ENC, o->engine_data, o->content_hint);
if (ENFN->image_stride_get)
ENFN->image_stride_get(ENDT, o->engine_data, &stride);
ENFN->image_stride_get(ENC, o->engine_data, &stride);
else
stride = o->cur->image.w * 4;
@ -619,7 +619,7 @@ evas_object_image_data_set(Eo *eo_obj, void *data)
{
if (o->engine_data)
{
ENFN->image_free(ENDT, o->engine_data);
ENFN->image_free(ENC, o->engine_data);
o->changed = EINA_TRUE;
evas_object_change(eo_obj, obj);
}
@ -644,7 +644,7 @@ evas_object_image_data_set(Eo *eo_obj, void *data)
}
/* FIXME - in engine call above
if (o->engine_data)
o->engine_data = ENFN->image_alpha_set(ENDT, o->engine_data, o->cur->has_alpha);
o->engine_data = ENFN->image_alpha_set(ENC, o->engine_data, o->cur->has_alpha);
*/
if (o->pixels_checked_out > 0) o->pixels_checked_out--;
if (p_data != o->engine_data)
@ -663,7 +663,7 @@ _image_to_free_del_cb(void *data)
obj = efl_data_scope_safe_get(px_entry->object, EFL_CANVAS_OBJECT_CLASS);
EINA_SAFETY_ON_NULL_RETURN(obj);
ENFN->image_free(ENDT, px_entry->image);
ENFN->image_free(ENC, px_entry->image);
free(px_entry);
}
@ -688,10 +688,10 @@ evas_object_image_data_get(const Eo *eo_obj, Eina_Bool for_writing)
data = NULL;
if (ENFN->image_scale_hint_set)
ENFN->image_scale_hint_set(ENDT, o->engine_data, o->scale_hint);
ENFN->image_scale_hint_set(ENC, o->engine_data, o->scale_hint);
if (ENFN->image_content_hint_set)
ENFN->image_content_hint_set(ENDT, o->engine_data, o->content_hint);
pixels = ENFN->image_data_get(ENDT, o->engine_data, for_writing, &data, &o->load_error, &tofree);
ENFN->image_content_hint_set(ENC, o->engine_data, o->content_hint);
pixels = ENFN->image_data_get(ENC, o->engine_data, for_writing, &data, &o->load_error, &tofree);
/* if we fail to get engine_data, we have to return NULL */
if (!pixels || !data) goto error;
@ -700,7 +700,7 @@ evas_object_image_data_get(const Eo *eo_obj, Eina_Bool for_writing)
{
o->engine_data = pixels;
if (ENFN->image_stride_get)
ENFN->image_stride_get(ENDT, o->engine_data, &stride);
ENFN->image_stride_get(ENC, o->engine_data, &stride);
else
stride = o->cur->image.w * 4;
@ -744,7 +744,7 @@ evas_object_image_data_get(const Eo *eo_obj, Eina_Bool for_writing)
error:
free(px_entry);
if (tofree && pixels)
ENFN->image_free(ENDT, pixels);
ENFN->image_free(ENC, pixels);
return NULL;
}
@ -762,13 +762,13 @@ evas_object_image_data_copy_set(Eo *eo_obj, void *data)
if ((o->cur->image.w <= 0) ||
(o->cur->image.h <= 0)) return;
if (o->engine_data)
ENFN->image_free(ENDT, o->engine_data);
ENFN->image_free(ENC, o->engine_data);
if (o->file_obj)
{
efl_del(o->file_obj);
o->file_obj = NULL;
}
o->engine_data = ENFN->image_new_from_copied_data(ENDT,
o->engine_data = ENFN->image_new_from_copied_data(ENC,
o->cur->image.w,
o->cur->image.h,
data,
@ -779,13 +779,13 @@ evas_object_image_data_copy_set(Eo *eo_obj, void *data)
int stride = 0;
o->engine_data =
ENFN->image_alpha_set(ENDT, o->engine_data, o->cur->has_alpha);
ENFN->image_alpha_set(ENC, o->engine_data, o->cur->has_alpha);
if (ENFN->image_scale_hint_set)
ENFN->image_scale_hint_set(ENDT, o->engine_data, o->scale_hint);
ENFN->image_scale_hint_set(ENC, o->engine_data, o->scale_hint);
if (ENFN->image_content_hint_set)
ENFN->image_content_hint_set(ENDT, o->engine_data, o->content_hint);
ENFN->image_content_hint_set(ENC, o->engine_data, o->content_hint);
if (ENFN->image_stride_get)
ENFN->image_stride_get(ENDT, o->engine_data, &stride);
ENFN->image_stride_get(ENC, o->engine_data, &stride);
else
stride = o->cur->image.w * 4;
@ -830,19 +830,19 @@ evas_object_image_size_set(Evas_Object *eo_obj, int w, int h)
EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
if (o->engine_data)
o->engine_data = ENFN->image_size_set(ENDT, o->engine_data, w, h);
o->engine_data = ENFN->image_size_set(ENC, o->engine_data, w, h);
else
o->engine_data = ENFN->image_new_from_copied_data
(ENDT, w, h, NULL, o->cur->has_alpha, o->cur->cspace);
(ENC, w, h, NULL, o->cur->has_alpha, o->cur->cspace);
if (o->engine_data)
{
if (ENFN->image_scale_hint_set)
ENFN->image_scale_hint_set(ENDT, o->engine_data, o->scale_hint);
ENFN->image_scale_hint_set(ENC, o->engine_data, o->scale_hint);
if (ENFN->image_content_hint_set)
ENFN->image_content_hint_set(ENDT, o->engine_data, o->content_hint);
ENFN->image_content_hint_set(ENC, o->engine_data, o->content_hint);
if (ENFN->image_stride_get)
ENFN->image_stride_get(ENDT, o->engine_data, &stride);
ENFN->image_stride_get(ENC, o->engine_data, &stride);
else
stride = w * 4;
}
@ -854,7 +854,7 @@ evas_object_image_size_set(Evas_Object *eo_obj, int w, int h)
/* FIXME - in engine call above
if (o->engine_data)
o->engine_data = ENFN->image_alpha_set(ENDT, o->engine_data, o->cur->has_alpha);
o->engine_data = ENFN->image_alpha_set(ENC, o->engine_data, o->cur->has_alpha);
*/
EINA_COW_WRITE_BEGIN(evas_object_image_state_cow, o->prev, Evas_Object_Image_State, prev_write)
EVAS_OBJECT_IMAGE_FREE_FILE_AND_KEY(cur_write, prev_write);
@ -885,7 +885,7 @@ evas_object_image_colorspace_set(Evas_Object *eo_obj, Evas_Colorspace cspace)
EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
if (o->engine_data)
ENFN->image_colorspace_set(ENDT, o->engine_data, cspace);
ENFN->image_colorspace_set(ENC, o->engine_data, cspace);
}
/* old video surfaces */
@ -1086,17 +1086,17 @@ evas_object_image_data_convert(Evas_Object *eo_obj, Evas_Colorspace to_cspace)
if ((o->preloading) && (o->engine_data))
{
o->preloading = EINA_FALSE;
ENFN->image_data_preload_cancel(ENDT, o->engine_data, eo_obj);
ENFN->image_data_preload_cancel(ENC, o->engine_data, eo_obj);
}
if (!o->engine_data) return NULL;
if (o->video_surface)
o->pixels->video.update_pixels(o->pixels->video.data, eo_obj, &o->pixels->video);
if (o->cur->cspace == to_cspace) return NULL;
data = NULL;
engine_data = ENFN->image_data_get(ENDT, o->engine_data, 0, &data, &o->load_error, NULL);
engine_data = ENFN->image_data_get(ENC, o->engine_data, 0, &data, &o->load_error, NULL);
result = _evas_image_data_convert_internal(o, data, to_cspace);
if (engine_data)
o->engine_data = ENFN->image_data_put(ENDT, engine_data, data);
o->engine_data = ENFN->image_data_put(ENC, engine_data, data);
return result;
}
@ -1115,12 +1115,12 @@ evas_object_image_reload(Evas_Object *eo_obj)
if ((o->preloading) && (o->engine_data))
{
o->preloading = EINA_FALSE;
ENFN->image_data_preload_cancel(ENDT, o->engine_data, eo_obj);
ENFN->image_data_preload_cancel(ENC, o->engine_data, eo_obj);
}
if ((!o->cur->u.file) ||
(o->pixels_checked_out > 0)) return;
if (o->engine_data)
o->engine_data = ENFN->image_dirty_region(ENDT, o->engine_data, 0, 0, o->cur->image.w, o->cur->image.h);
o->engine_data = ENFN->image_dirty_region(ENC, o->engine_data, 0, 0, o->cur->image.w, o->cur->image.h);
o->written = EINA_FALSE;
_evas_image_unload(eo_obj, obj, 1);
evas_object_inform_call_image_unloaded(eo_obj);
@ -1168,7 +1168,7 @@ evas_object_image_pixels_import(Evas_Object *eo_obj, Evas_Pixel_Import_Source *p
DATA32 *image_pixels = NULL;
o->engine_data =
ENFN->image_data_get(ENDT,
ENFN->image_data_get(ENC,
o->engine_data,
1,
&image_pixels,
@ -1177,10 +1177,10 @@ evas_object_image_pixels_import(Evas_Object *eo_obj, Evas_Pixel_Import_Source *p
/* memcpy(image_pixels, pixels->rows, o->cur->image.w * o->cur->image.h * 4);*/
if (o->engine_data)
o->engine_data =
ENFN->image_data_put(ENDT, o->engine_data, image_pixels);
ENFN->image_data_put(ENC, o->engine_data, image_pixels);
if (o->engine_data)
o->engine_data =
ENFN->image_alpha_set(ENDT, o->engine_data, o->cur->has_alpha);
ENFN->image_alpha_set(ENC, o->engine_data, o->cur->has_alpha);
o->changed = EINA_TRUE;
evas_object_change(eo_obj, obj);
}
@ -1193,13 +1193,13 @@ evas_object_image_pixels_import(Evas_Object *eo_obj, Evas_Pixel_Import_Source *p
{
DATA32 *image_pixels = NULL;
o->engine_data = ENFN->image_data_get(ENDT, o->engine_data, 1, &image_pixels,&o->load_error, NULL);
o->engine_data = ENFN->image_data_get(ENC, o->engine_data, 1, &image_pixels,&o->load_error, NULL);
if (image_pixels)
evas_common_convert_yuv_422p_601_rgba((DATA8 **) pixels->rows, (DATA8 *) image_pixels, o->cur->image.w, o->cur->image.h);
if (o->engine_data)
o->engine_data = ENFN->image_data_put(ENDT, o->engine_data, image_pixels);
o->engine_data = ENFN->image_data_put(ENC, o->engine_data, image_pixels);
if (o->engine_data)
o->engine_data = ENFN->image_alpha_set(ENDT, o->engine_data, o->cur->has_alpha);
o->engine_data = ENFN->image_alpha_set(ENC, o->engine_data, o->cur->has_alpha);
o->changed = EINA_TRUE;
evas_object_change(eo_obj, obj);
}

View File

@ -888,7 +888,7 @@ _image_data_unset(Evas_Object_Protected_Data *obj, Eina_List **list)
data->engine_data = NULL;\
}
CHECK(EFL_CANVAS_IMAGE_INTERNAL_CLASS, Evas_Image_Data,
ENFN->image_free(ENDT, data->engine_data))
ENFN->image_free(ENC, data->engine_data))
else CHECK(EVAS_VG_CLASS, Evas_VG_Data,
obj->layer->evas->engine.func->ector_free(data->engine_data))
else CHECK(EFL_CANVAS_POLYGON_CLASS, Efl_Canvas_Polygon_Data,

View File

@ -122,7 +122,7 @@ evas_object_image_render_prepare(Evas_Object *eo_obj EINA_UNUSED, Evas_Object_Pr
// if image data not loaded or in texture then upload
if ((o->cur->u.file) || (o->written) || (o->cur->frame != 0))
{
if (o->engine_data) ENFN->image_prepare(ENDT, o->engine_data);
if (o->engine_data) ENFN->image_prepare(ENC, o->engine_data);
}
#endif
#if 0
@ -138,7 +138,7 @@ evas_object_image_render_prepare(Evas_Object *eo_obj EINA_UNUSED, Evas_Object_Pr
if (!o->engine_data_prep)
{
prep = ENFN->image_surface_noscale_new
(ENDT, obj->cur->geometry.w, obj->cur->geometry.h,
(ENC, obj->cur->geometry.w, obj->cur->geometry.h,
o->cur->has_alpha);
ctx = ENFN->context_new(ENDT);
ENFN->context_clip_set(ENDT, ctx, 0, 0,
@ -183,7 +183,7 @@ _evas_image_cleanup(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Evas_I
if ((o->preloading) && (o->engine_data))
{
o->preloading = EINA_FALSE;
ENFN->image_data_preload_cancel(ENDT, o->engine_data, eo_obj);
ENFN->image_data_preload_cancel(ENC, o->engine_data, eo_obj);
}
if (o->cur->source) _evas_image_proxy_unset(eo_obj, obj, o);
if (o->cur->scene) _evas_image_3d_unset(eo_obj, obj, o);
@ -242,7 +242,7 @@ _efl_canvas_image_internal_efl_object_constructor(Eo *eo_obj, Evas_Image_Data *o
o->prev = eina_cow_alloc(evas_object_image_state_cow);
o->proxy_src_clip = EINA_TRUE;
cspace = ENFN->image_colorspace_get(ENDT, o->engine_data);
cspace = ENFN->image_colorspace_get(ENC, o->engine_data);
if (cspace != o->cur->cspace)
{
EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
@ -311,9 +311,9 @@ _evas_image_init_set(const Eina_File *f, const char *file, const char *key,
if (o->preloading)
{
o->preloading = EINA_FALSE;
ENFN->image_data_preload_cancel(ENDT, o->engine_data, eo_obj);
ENFN->image_data_preload_cancel(ENC, o->engine_data, eo_obj);
}
ENFN->image_free(ENDT, o->engine_data);
ENFN->image_free(ENC, o->engine_data);
}
if (o->file_obj)
{
@ -353,17 +353,17 @@ _evas_image_done_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Image_Dat
int stride;
Evas_Image_Orient orient;
ENFN->image_size_get(ENDT, o->engine_data, &w, &h);
ENFN->image_size_get(ENC, o->engine_data, &w, &h);
if (ENFN->image_stride_get)
ENFN->image_stride_get(ENDT, o->engine_data, &stride);
ENFN->image_stride_get(ENC, o->engine_data, &stride);
else
stride = w * 4;
orient = ENFN->image_orient_get(ENDT, o->engine_data);
orient = ENFN->image_orient_get(ENC, o->engine_data);
EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
{
state_write->has_alpha = ENFN->image_alpha_get(ENDT, o->engine_data);
state_write->cspace = ENFN->image_colorspace_get(ENDT, o->engine_data);
state_write->has_alpha = ENFN->image_alpha_get(ENC, o->engine_data);
state_write->cspace = ENFN->image_colorspace_get(ENC, o->engine_data);
if ((o->cur->image.w != w) || (o->cur->image.h != h))
resize_call = EINA_TRUE;
@ -414,20 +414,20 @@ _evas_image_orientation_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Image_Orient or
if ((o->preloading) && (o->engine_data))
{
o->preloading = EINA_FALSE;
ENFN->image_data_preload_cancel(ENDT, o->engine_data, eo_obj);
ENFN->image_data_preload_cancel(ENC, o->engine_data, eo_obj);
}
if (o->engine_data)
{
int stride = 0;
o->engine_data = ENFN->image_orient_set(ENDT, o->engine_data, orient);
o->engine_data = ENFN->image_orient_set(ENC, o->engine_data, orient);
if (o->engine_data)
{
ENFN->image_size_get(ENDT, o->engine_data, &iw, &ih);
ENFN->image_size_get(ENC, o->engine_data, &iw, &ih);
if (ENFN->image_stride_get)
ENFN->image_stride_get(ENDT, o->engine_data, &stride);
ENFN->image_stride_get(ENC, o->engine_data, &stride);
else
stride = iw * 4;
@ -810,7 +810,7 @@ _efl_canvas_image_internal_efl_gfx_buffer_alpha_set(Eo *eo_obj, Evas_Image_Data
if ((o->preloading) && (o->engine_data))
{
o->preloading = EINA_FALSE;
ENFN->image_data_preload_cancel(ENDT, o->engine_data, eo_obj);
ENFN->image_data_preload_cancel(ENC, o->engine_data, eo_obj);
}
has_alpha = !!has_alpha;
@ -828,13 +828,13 @@ _efl_canvas_image_internal_efl_gfx_buffer_alpha_set(Eo *eo_obj, Evas_Image_Data
{
int stride = 0;
o->engine_data = ENFN->image_alpha_set(ENDT, o->engine_data, o->cur->has_alpha);
o->engine_data = ENFN->image_alpha_set(ENC, o->engine_data, o->cur->has_alpha);
if (ENFN->image_scale_hint_set)
ENFN->image_scale_hint_set(ENDT, o->engine_data, o->scale_hint);
ENFN->image_scale_hint_set(ENC, o->engine_data, o->scale_hint);
if (ENFN->image_content_hint_set)
ENFN->image_content_hint_set(ENDT, o->engine_data, o->content_hint);
ENFN->image_content_hint_set(ENC, o->engine_data, o->content_hint);
if (ENFN->image_stride_get)
ENFN->image_stride_get(ENDT, o->engine_data, &stride);
ENFN->image_stride_get(ENC, o->engine_data, &stride);
else
stride = o->cur->image.w * 4;
@ -911,7 +911,7 @@ _efl_canvas_image_internal_efl_file_save(const Eo *eo_obj, Evas_Image_Data *o, c
&imagew, &imageh, &uvw, &uvh, EINA_TRUE, EINA_TRUE);
if (!pixels) goto no_pixels;
cspace = ENFN->image_file_colorspace_get(ENDT, pixels);
cspace = ENFN->image_file_colorspace_get(ENC, pixels);
want_cspace = cspace;
if (flags)
@ -945,7 +945,7 @@ _efl_canvas_image_internal_efl_file_save(const Eo *eo_obj, Evas_Image_Data *o, c
want_cspace = EVAS_COLORSPACE_ETC1;
else if (!strcmp(encoding, "etc2"))
{
if (!ENFN->image_alpha_get(ENDT, pixels))
if (!ENFN->image_alpha_get(ENC, pixels))
want_cspace = EVAS_COLORSPACE_RGB8_ETC2;
else
want_cspace = EVAS_COLORSPACE_RGBA8_ETC2_EAC;
@ -961,7 +961,7 @@ _efl_canvas_image_internal_efl_file_save(const Eo *eo_obj, Evas_Image_Data *o, c
Evas_Colorspace cs;
Eina_Slice sl;
ok = ENFN->image_data_direct_get(ENDT, pixels, 0, &sl, &cs, EINA_TRUE);
ok = ENFN->image_data_direct_get(ENC, pixels, 0, &sl, &cs, EINA_TRUE);
if (ok && (cs == want_cspace))
data = (DATA32 *)sl.mem;
}
@ -981,7 +981,7 @@ _efl_canvas_image_internal_efl_file_save(const Eo *eo_obj, Evas_Image_Data *o, c
int stride;
cspace = EVAS_COLORSPACE_ARGB8888;
ok = ENFN->image_data_map(ENDT, &pixels, &slice, &stride, 0, 0, imagew, imageh,
ok = ENFN->image_data_map(ENC, &pixels, &slice, &stride, 0, 0, imagew, imageh,
cspace, EFL_GFX_BUFFER_ACCESS_MODE_READ, 0);
if (!ok || !slice.mem) goto no_pixels;
unmap_it = EINA_TRUE;
@ -1003,7 +1003,7 @@ _efl_canvas_image_internal_efl_file_save(const Eo *eo_obj, Evas_Image_Data *o, c
else ok = EINA_FALSE;
if (unmap_it)
ENFN->image_data_unmap(ENDT, pixels, &slice);
ENFN->image_data_unmap(ENC, pixels, &slice);
free(encoding);
if (!ok) ERR("Image save failed.");
@ -1046,7 +1046,7 @@ _evas_image_native_surface_set(Eo *eo_obj, Evas_Native_Surface *surf)
if ((surf) &&
((surf->version < 2) ||
(surf->version > EVAS_NATIVE_SURFACE_VERSION))) return EINA_FALSE;
o->engine_data = ENFN->image_native_set(ENDT, o->engine_data, surf);
o->engine_data = ENFN->image_native_set(ENC, o->engine_data, surf);
if (surf && surf->version > 4)
{
@ -1072,7 +1072,7 @@ _evas_image_native_surface_get(const Evas_Object *eo_obj)
Evas_Native_Surface *surf = NULL;
if (ENFN->image_native_get)
surf = ENFN->image_native_get(ENDT, o->engine_data);
surf = ENFN->image_native_get(ENC, o->engine_data);
return surf;
}
@ -1089,9 +1089,9 @@ _efl_canvas_image_internal_efl_image_scale_hint_set(Eo *eo_obj, Evas_Image_Data
int stride = 0;
if (ENFN->image_scale_hint_set)
ENFN->image_scale_hint_set(ENDT, o->engine_data, o->scale_hint);
ENFN->image_scale_hint_set(ENC, o->engine_data, o->scale_hint);
if (ENFN->image_stride_get)
ENFN->image_stride_get(ENDT, o->engine_data, &stride);
ENFN->image_stride_get(ENC, o->engine_data, &stride);
else
stride = o->cur->image.w * 4;
@ -1122,9 +1122,9 @@ _efl_canvas_image_internal_efl_image_content_hint_set(Eo *eo_obj, Evas_Image_Dat
int stride = 0;
if (ENFN->image_content_hint_set)
ENFN->image_content_hint_set(ENDT, o->engine_data, o->content_hint);
ENFN->image_content_hint_set(ENC, o->engine_data, o->content_hint);
if (ENFN->image_stride_get)
ENFN->image_stride_get(ENDT, o->engine_data, &stride);
ENFN->image_stride_get(ENC, o->engine_data, &stride);
else
stride = o->cur->image.w * 4;
@ -1243,7 +1243,7 @@ _evas_image_unload(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Eina_Bo
if (dirty)
{
if (o->engine_data)
o->engine_data = ENFN->image_dirty_region(ENDT, o->engine_data,
o->engine_data = ENFN->image_dirty_region(ENC, o->engine_data,
0, 0,
o->cur->image.w, o->cur->image.h);
}
@ -1252,9 +1252,9 @@ _evas_image_unload(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Eina_Bo
if (o->preloading)
{
o->preloading = EINA_FALSE;
ENFN->image_data_preload_cancel(ENDT, o->engine_data, eo_obj);
ENFN->image_data_preload_cancel(ENC, o->engine_data, eo_obj);
}
ENFN->image_free(ENDT, o->engine_data);
ENFN->image_free(ENC, o->engine_data);
}
o->engine_data = NULL;
o->load_error = EVAS_LOAD_ERROR_NONE;
@ -1299,7 +1299,7 @@ _evas_image_load(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Evas_Imag
lo.emile.degree = 0;
lo.skip_head = o->skip_head;
if (o->cur->mmaped_source)
o->engine_data = ENFN->image_mmap(ENDT, o->cur->u.f, o->cur->key, &o->load_error, &lo);
o->engine_data = ENFN->image_mmap(ENC, o->cur->u.f, o->cur->key, &o->load_error, &lo);
else
{
const char *file2 = o->cur->u.file;
@ -1314,7 +1314,7 @@ _evas_image_load(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Evas_Imag
efl_vpath_file_wait(o->file_obj);
file2 = efl_vpath_file_result_get(o->file_obj);
}
o->engine_data = ENFN->image_load(ENDT, file2, o->cur->key, &o->load_error, &lo);
o->engine_data = ENFN->image_load(ENC, file2, o->cur->key, &o->load_error, &lo);
if ((o->file_obj) && (!efl_vpath_file_keep_get(o->file_obj)))
{
efl_del(o->file_obj);
@ -1328,16 +1328,16 @@ _evas_image_load(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Evas_Imag
int stride = 0;
Eina_Bool resize_call = EINA_FALSE;
ENFN->image_size_get(ENDT, o->engine_data, &w, &h);
ENFN->image_size_get(ENC, o->engine_data, &w, &h);
if (ENFN->image_stride_get)
ENFN->image_stride_get(ENDT, o->engine_data, &stride);
ENFN->image_stride_get(ENC, o->engine_data, &stride);
else
stride = w * 4;
EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
{
state_write->has_alpha = ENFN->image_alpha_get(ENDT, o->engine_data);
state_write->cspace = ENFN->image_colorspace_get(ENDT, o->engine_data);
state_write->has_alpha = ENFN->image_alpha_get(ENC, o->engine_data);
state_write->cspace = ENFN->image_colorspace_get(ENC, o->engine_data);
if ((state_write->image.w != w) || (state_write->image.h != h))
resize_call = EINA_TRUE;
state_write->image.w = w;
@ -1364,16 +1364,16 @@ _evas_image_load_post_update(Evas_Object *eo_obj, Evas_Object_Protected_Data *ob
int stride = 0;
Eina_Bool resize_call = EINA_FALSE;
ENFN->image_size_get(ENDT, o->engine_data, &w, &h);
ENFN->image_size_get(ENC, o->engine_data, &w, &h);
if (ENFN->image_stride_get)
ENFN->image_stride_get(ENDT, o->engine_data, &stride);
ENFN->image_stride_get(ENC, o->engine_data, &stride);
else
stride = w * 4;
EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
{
state_write->has_alpha = ENFN->image_alpha_get(ENDT, o->engine_data);
state_write->cspace = ENFN->image_colorspace_get(ENDT, o->engine_data);
state_write->has_alpha = ENFN->image_alpha_get(ENC, o->engine_data);
state_write->cspace = ENFN->image_colorspace_get(ENC, o->engine_data);
if ((state_write->image.w != w) || (state_write->image.h != h))
resize_call = EINA_TRUE;
state_write->image.w = w;
@ -1495,18 +1495,18 @@ evas_object_image_free(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj)
if (o->cur->scene) _evas_image_3d_unset(eo_obj, obj, o);
if (obj->layer && obj->layer->evas)
{
if (o->engine_data && ENDT)
if (o->engine_data && ENC)
{
if (o->preloading)
{
o->preloading = EINA_FALSE;
ENFN->image_data_preload_cancel(ENDT, o->engine_data, eo_obj);
ENFN->image_data_preload_cancel(ENC, o->engine_data, eo_obj);
}
ENFN->image_free(ENDT, o->engine_data);
ENFN->image_free(ENC, o->engine_data);
}
if (o->engine_data_prep && ENDT)
if (o->engine_data_prep && ENC)
{
ENFN->image_free(ENDT, o->engine_data_prep);
ENFN->image_free(ENC, o->engine_data_prep);
}
if (o->video_surface)
{
@ -1880,7 +1880,7 @@ _evas_object_image_can_use_plane(Evas_Object_Protected_Data *obj)
if (!ENFN->image_native_get)
return EINA_FALSE;
ns = ENFN->image_native_get(ENDT, o->engine_data);
ns = ENFN->image_native_get(ENC, o->engine_data);
if (!ns) return EINA_FALSE;
o->plane = ENFN->image_plane_assign(ENDT, o->engine_data,
@ -1944,7 +1944,7 @@ evas_object_image_render(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, v
/* Draw a bright red rectangle where the object replaced by
* a hardware plane would have been.
*/
ns = ENFN->image_native_get(ENDT, o->engine_data);
ns = ENFN->image_native_get(ENC, o->engine_data);
if (ns && ns->type == EVAS_NATIVE_SURFACE_WL_DMABUF)
{
ENFN->context_color_set(output, context, 255, 0, 0, 255);
@ -2615,7 +2615,7 @@ evas_object_image_render_pre(Evas_Object *eo_obj,
{
Evas_Coord idw, idh, idx, idy;
int x, y, w, h;
e->engine.func->image_dirty_region(ENDT, o->engine_data, rr->x, rr->y, rr->w, rr->h);
e->engine.func->image_dirty_region(ENC, o->engine_data, rr->x, rr->y, rr->w, rr->h);
idx = evas_object_image_figure_x_fill(eo_obj, obj, o->cur->fill.x, o->cur->fill.w, &idw);
idy = evas_object_image_figure_y_fill(eo_obj, obj, o->cur->fill.y, o->cur->fill.h, &idh);
@ -2735,7 +2735,7 @@ evas_object_image_render_pre(Evas_Object *eo_obj,
{
Eina_Rectangle r;
e->engine.func->image_dirty_region(ENDT, o->engine_data, rr->x, rr->y, rr->w, rr->h);
e->engine.func->image_dirty_region(ENC, o->engine_data, rr->x, rr->y, rr->w, rr->h);
r.x = rr->x;
r.y = rr->y;
r.w = rr->w;
@ -2761,7 +2761,7 @@ evas_object_image_render_pre(Evas_Object *eo_obj,
eina_rectangle_free(r);
}
EINA_COW_PIXEL_WRITE_END(o, pixi_write);
e->engine.func->image_dirty_region(ENDT, o->engine_data, 0, 0, o->cur->image.w, o->cur->image.h);
e->engine.func->image_dirty_region(ENC, o->engine_data, 0, 0, o->cur->image.w, o->cur->image.h);
evas_object_render_pre_prev_cur_add(&e->clip_changes, eo_obj,
obj);
@ -2816,7 +2816,7 @@ done:
{
if (o->engine_data_prep)
{
ENFN->image_free(ENDT, o->engine_data_prep);
ENFN->image_free(ENC, o->engine_data_prep);
o->engine_data_prep = NULL;
}
}
@ -3555,7 +3555,7 @@ _evas_object_image_preloading_check(Evas_Object *eo_obj)
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
Evas_Image_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
if (ENFN->image_load_error_get)
o->load_error = ENFN->image_load_error_get(ENDT, o->engine_data);
o->load_error = ENFN->image_load_error_get(ENC, o->engine_data);
}
Evas_Object *
@ -3662,7 +3662,7 @@ _evas_object_image_surface_get(Evas_Object_Protected_Data *obj, Eina_Bool create
if (pd->engine_data)
{
ENFN->image_free(ENDT, pd->engine_data);
ENFN->image_free(ENC, pd->engine_data);
pd->engine_data = NULL;
}
@ -3671,7 +3671,7 @@ _evas_object_image_surface_get(Evas_Object_Protected_Data *obj, Eina_Bool create
// FIXME: alpha forced to 1 for now, need to figure out Evas alpha here
EINA_COW_IMAGE_STATE_WRITE_BEGIN(pd, state_write)
{
pd->engine_data = ENFN->image_map_surface_new(ENDT,
pd->engine_data = ENFN->image_map_surface_new(ENC,
obj->cur->geometry.w,
obj->cur->geometry.h,
1);

View File

@ -1999,7 +1999,7 @@ evas_render_mapped(Evas_Public_Data *evas, Evas_Object *eo_obj,
EINA_COW_WRITE_BEGIN(evas_object_map_cow, obj->map, Evas_Object_Map_Data, map_write)
{
map_write->surface = ENFN->image_dirty_region
(ENDT, map_write->surface,
(ENC, map_write->surface,
0, 0, map_write->surface_w, map_write->surface_h);
map_write->cur.valid_map = EINA_TRUE;
@ -2504,14 +2504,14 @@ evas_render_mask_subrender(Evas_Public_Data *evas,
Eina_Bool smooth = evas_object_image_smooth_scale_get(mask->object);
void *original = mask->func->engine_data_get(mask->object);
void *scaled = ENFN->image_scaled_update
(ENDT, mdata->surface, original, w, h, smooth, EVAS_COLORSPACE_GRY8);
(ENC, mdata->surface, original, w, h, smooth, EVAS_COLORSPACE_GRY8);
if (scaled)
{
done = EINA_TRUE;
mdata->surface = scaled;
mdata->w = w;
mdata->h = h;
mdata->is_alpha = (ENFN->image_colorspace_get(ENDT, scaled) == EVAS_COLORSPACE_GRY8);
mdata->is_alpha = (ENFN->image_colorspace_get(ENC, scaled) == EVAS_COLORSPACE_GRY8);
mdata->is_scaled = EINA_TRUE;
}
eina_evlog("-mask_scaled_update", mask->object, 0.0, NULL);
@ -2618,7 +2618,7 @@ evas_render_mask_subrender(Evas_Public_Data *evas,
/* END OF HACK */
}
mdata->surface = ENFN->image_dirty_region(ENDT, mdata->surface, 0, 0, w, h);
mdata->surface = ENFN->image_dirty_region(ENC, mdata->surface, 0, 0, w, h);
end:
EINA_COW_WRITE_END(evas_object_mask_cow, mask->mask, mdata);

View File

@ -21,6 +21,12 @@ typedef void (*Window_GL_Context_Use)(Context_3D *ctx);
struct _Render_Engine_GL_Generic
{
Render_Engine_Software_Generic software;
struct {
Evas_Object_Image_Pixels_Get_Cb get_pixels;
void *get_pixels_data;
Evas_Object *obj;
} func;
};
struct _Render_Output_GL_Generic
@ -33,12 +39,6 @@ struct _Render_Output_GL_Generic
Window_GL_Context_New window_gl_context_new;
Window_GL_Context_Use window_gl_context_use;
struct {
Evas_Object_Image_Pixels_Get_Cb get_pixels;
void *get_pixels_data;
Evas_Object *obj;
} func;
Context_3D *context_3d;
E3D_Renderer *renderer_3d;
const EVGL_Interface *evgl_funcs;
@ -92,9 +92,6 @@ evas_render_engine_gl_generic_init(Render_Engine_Software_Generic *engine,
re->window_gl_context_new = window_gl_context_new;
re->window_gl_context_use = window_gl_context_use;
re->func.get_pixels = NULL;
re->func.get_pixels_data = NULL;
re->func.obj = NULL;
re->context_3d = NULL;
re->renderer_3d = NULL;
re->evgl_funcs = evgl_funcs;
@ -106,15 +103,4 @@ evas_render_engine_gl_generic_init(Render_Engine_Software_Generic *engine,
return EINA_TRUE;
}
static inline void
evas_render_engine_software_gl_get_pixels_set(Render_Output_GL_Generic *re,
Evas_Object_Image_Pixels_Get_Cb get_pixels,
void *get_pixels_data,
Evas_Object *obj)
{
re->func.get_pixels = get_pixels;
re->func.get_pixels_data = get_pixels_data;
re->func.obj = obj;
}
#endif

View File

@ -82,6 +82,20 @@ gl_generic_context_find(Render_Engine_GL_Generic *engine)
return r;
}
static void
gl_generic_window_find(Render_Engine_GL_Generic *engine)
{
Render_Output_GL_Generic *output;
Eina_List *l;
EINA_LIST_FOREACH(engine->software.outputs, l, output)
{
if (!output->software.ob) continue;
gl_generic_window_use(output);
break;
}
}
static int eng_gl_image_direct_get(void *data, void *image);
static int eng_gl_surface_destroy(void *data, void *surface);
static Eina_Bool eng_gl_surface_lock(void *data, void *surface);
@ -212,20 +226,18 @@ eng_polygon_draw(void *engine EINA_UNUSED, void *data, void *context, void *surf
static int
eng_image_alpha_get(void *engine EINA_UNUSED, void *image)
{
Evas_GL_Image *im;
Evas_GL_Image *im = image;
if (!image) return 1;
im = image;
if (!im) return 1;
return im->alpha;
}
static Evas_Colorspace
eng_image_colorspace_get(void *engine EINA_UNUSED, void *image)
{
Evas_GL_Image *im;
Evas_GL_Image *im = image;
if (!image) return EVAS_COLORSPACE_ARGB8888;
im = image;
if (!im) return EVAS_COLORSPACE_ARGB8888;
return im->cs.space;
}
@ -242,7 +254,7 @@ eng_image_alpha_set(void *engine, void *image, int has_alpha)
im->alpha = has_alpha;
return image;
}
gl_generic_window_use(engine);
gl_generic_window_find(engine);
if ((im->tex) && (im->tex->pt->dyn.img))
{
im->alpha = has_alpha;
@ -321,7 +333,7 @@ eng_image_colorspace_set(void *engine, void *image, Evas_Colorspace cspace)
if (im->native.data) return;
/* FIXME: can move to gl_common */
if (im->cs.space == cspace) return;
gl_generic_window_use(engine);
gl_generic_window_find(engine);
evas_gl_common_image_alloc_ensure(im);
switch (cspace)
{
@ -436,7 +448,7 @@ eng_image_native_set(void *engine, void *image, void *native)
unsigned int tex = 0;
unsigned int fbo = 0;
gl_context = gl_generic_context_get(engine);
gl_context = gl_generic_context_find(engine);
if (!im)
{
@ -469,7 +481,7 @@ eng_image_native_set(void *engine, void *image, void *native)
}
if ((!ns) && (!im->native.data)) return im;
gl_generic_window_use(engine);
gl_generic_window_find(engine);
if (im->native.data)
{
@ -553,7 +565,7 @@ eng_image_load(void *engine, const char *file, const char *key, int *error, Evas
Evas_Engine_GL_Context *gl_context;
*error = EVAS_LOAD_ERROR_NONE;
gl_context = gl_generic_context_get(engine);
gl_context = gl_generic_context_find(engine);
return evas_gl_common_image_load(gl_context, file, key, lo, error);
}
@ -563,7 +575,7 @@ eng_image_mmap(void *engine, Eina_File *f, const char *key, int *error, Evas_Ima
Evas_Engine_GL_Context *gl_context;
*error = EVAS_LOAD_ERROR_NONE;
gl_context = gl_generic_context_get(engine);
gl_context = gl_generic_context_find(engine);
return evas_gl_common_image_mmap(gl_context, f, key, lo, error);
}
@ -572,7 +584,7 @@ eng_image_new_from_data(void *engine, int w, int h, DATA32 *image_data, int alph
{
Evas_Engine_GL_Context *gl_context;
gl_context = gl_generic_context_get(engine);
gl_context = gl_generic_context_find(engine);
return evas_gl_common_image_new_from_data(gl_context, w, h, image_data, alpha, cspace);
}
@ -581,7 +593,7 @@ eng_image_new_from_copied_data(void *engine, int w, int h, DATA32 *image_data, i
{
Evas_Engine_GL_Context *gl_context;
gl_context = gl_generic_context_get(engine);
gl_context = gl_generic_context_find(engine);
return evas_gl_common_image_new_from_copied_data(gl_context, w, h, image_data, alpha, cspace);
}
@ -589,7 +601,7 @@ void
eng_image_free(void *engine, void *image)
{
if (!image) return;
gl_generic_window_use(engine);
gl_generic_window_find(engine);
evas_gl_common_image_free(image);
}
@ -643,7 +655,7 @@ eng_image_size_set(void *engine, void *image, int w, int h)
evas_gl_common_image_native_enable(im);
return image;
}
gl_context = gl_generic_context_get(engine);
gl_context = gl_generic_context_find(engine);
if ((im->tex) && (im->tex->pt->dyn.img))
{
evas_gl_common_texture_free(im->tex, EINA_TRUE);
@ -686,13 +698,13 @@ eng_image_dirty_region(void *engine, void *image, int x, int y, int w, int h)
if (!image) return NULL;
if (im->native.data) return image;
gl_generic_window_use(engine);
gl_generic_window_find(engine);
evas_gl_common_image_dirty(image, x, y, w, h);
return image;
}
static Evas_GL_Image *
_rotate_image_data(Render_Output_GL_Generic *re, Evas_GL_Image *im1)
_rotate_image_data(Render_Engine_GL_Generic *re, Evas_GL_Image *im1)
{
int alpha;
Evas_GL_Image *im2;
@ -700,7 +712,7 @@ _rotate_image_data(Render_Output_GL_Generic *re, Evas_GL_Image *im1)
RGBA_Draw_Context *dc;
int w, h;
gl_context = gl_generic_context_get(re);
gl_context = gl_generic_context_find(re);
w = im1->w;
h = im1->h;
@ -774,7 +786,7 @@ eng_image_data_get(void *engine, void *image, int to_write, DATA32 **image_data,
goto rotate_image;
#ifdef GL_GLES
gl_generic_window_use(engine);
gl_generic_window_find(engine);
if ((im->tex) && (im->tex->pt) && (im->tex->pt->dyn.img) &&
(im->cs.space == EVAS_COLORSPACE_ARGB8888))
@ -825,7 +837,7 @@ eng_image_data_get(void *engine, void *image, int to_write, DATA32 **image_data,
return im;
}
gl_generic_window_use(engine);
gl_generic_window_find(engine);
#endif
/* use glReadPixels for FBOs (assume fbo > 0) */
@ -983,7 +995,7 @@ eng_image_data_put(void *engine, void *image, DATA32 *image_data)
if (!image) return NULL;
im = image;
if (im->native.data) return image;
gl_generic_window_use(engine);
gl_generic_window_find(engine);
evas_gl_common_image_alloc_ensure(im);
if ((im->tex) && (im->tex->pt)
&& (im->tex->pt->dyn.data)
@ -1071,7 +1083,7 @@ eng_image_orient_set(void *engine, void *image, Evas_Image_Orient orient)
im = image;
if (im->orient == orient) return image;
gl_generic_window_use(engine);
gl_generic_window_find(engine);
evas_gl_common_image_update(im->gc, im);
@ -1101,10 +1113,9 @@ eng_image_orient_set(void *engine, void *image, Evas_Image_Orient orient)
static Evas_Image_Orient
eng_image_orient_get(void *engine EINA_UNUSED, void *image)
{
Evas_GL_Image *im;
Evas_GL_Image *im = image;
if (!image) return EVAS_IMAGE_ORIENT_NONE;
im = image;
if (!im) return EVAS_IMAGE_ORIENT_NONE;
return im->orient;
}
@ -1112,7 +1123,6 @@ static void
eng_image_data_preload_request(void *engine EINA_UNUSED, void *image, const Eo *target)
{
Evas_GL_Image *gim = image;
// Render_Output_GL_Generic *re = data;
RGBA_Image *im;
if (!gim) return;
@ -1127,19 +1137,6 @@ eng_image_data_preload_request(void *engine EINA_UNUSED, void *image, const Eo *
else
#endif
evas_cache_image_preload_data(&im->cache_entry, target, NULL, NULL, NULL);
/*
if (!gim->tex)
{
Evas_Engine_GL_Context *gl_context;
gl_context = gl_generic_context_get(engine);
gim->tex = evas_gl_common_texture_new(gl_context, gim->im, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN(gim->tex);
gim->tex->im = gim;
im->cache_entry.flags.updated_data = 1;
}
evas_gl_preload_target_register(gim->tex, (Eo*) target);
*/
}
static void
@ -1164,8 +1161,9 @@ eng_image_data_preload_cancel(void *engine EINA_UNUSED, void *image, const Eo *t
}
static Eina_Bool
eng_image_draw(void *engine EINA_UNUSED, void *data, void *context, void *surface, void *image, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h, int smooth, Eina_Bool do_async EINA_UNUSED)
eng_image_draw(void *eng, void *data, void *context, void *surface, void *image, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h, int smooth, Eina_Bool do_async EINA_UNUSED)
{
Render_Engine_GL_Generic *engine = eng;
Evas_Engine_GL_Context *gl_context;
Render_Output_GL_Generic *re = data;
Evas_GL_Image *im = image;
@ -1175,9 +1173,9 @@ eng_image_draw(void *engine EINA_UNUSED, void *data, void *context, void *surfac
n = im->native.data;
gl_context = gl_generic_context_get(data);
gl_context = gl_generic_context_get(re);
if (eng_gl_image_direct_get(data, image))
if (eng_gl_image_direct_get(re, image))
{
void *direct_surface = NULL;
@ -1212,7 +1210,7 @@ eng_image_draw(void *engine EINA_UNUSED, void *data, void *context, void *surfac
// Call pixel get function
evgl_get_pixels_pre();
re->func.get_pixels(re->func.get_pixels_data, re->func.obj);
engine->func.get_pixels(engine->func.get_pixels_data, engine->func.obj);
evgl_get_pixels_post();
// Call end tile if it's being used
@ -1313,7 +1311,7 @@ eng_image_map_surface_new(void *engine, int w, int h, int alpha)
{
Evas_Engine_GL_Context *gl_context;
gl_context = gl_generic_context_get(engine);
gl_context = gl_generic_context_find(engine);
return evas_gl_common_image_surface_new(gl_context, w, h, alpha, EINA_FALSE);
}
@ -1328,7 +1326,7 @@ eng_image_scaled_update(void *engine EINA_UNUSED, void *scaled, void *image,
static void
eng_image_content_hint_set(void *engine, void *image, int hint)
{
gl_generic_window_use(engine);
gl_generic_window_find(engine);
evas_gl_common_image_content_hint_set(image, hint);
}
@ -1703,13 +1701,13 @@ eng_gl_surface_direct_renderable_get(void *engine, Evas_Native_Surface *ns, Eina
}
static void
eng_gl_get_pixels_set(void *engine, void *get_pixels, void *get_pixels_data, void *obj)
eng_gl_get_pixels_set(void *eng, void *get_pixels, void *get_pixels_data, void *obj)
{
Render_Output_GL_Generic *re = engine;
Render_Engine_GL_Generic *engine = eng;
re->func.get_pixels = get_pixels;
re->func.get_pixels_data = get_pixels_data;
re->func.obj = (Evas_Object*)obj;
engine->func.get_pixels = get_pixels;
engine->func.get_pixels_data = get_pixels_data;
engine->func.obj = (Evas_Object*)obj;
}
static void
@ -1929,13 +1927,13 @@ eng_gl_image_direct_get(void *engine EINA_UNUSED, void *image)
}
static void
eng_gl_image_direct_set(void *engine, void *image, Eina_Bool direct)
eng_gl_image_direct_set(void *eng, void *image, Eina_Bool direct)
{
Render_Output_GL_Generic *re = engine;
Render_Engine_GL_Generic *engine = eng;
Evas_GL_Image *im = image;
if (!im) return;
if (im->native.data && direct && re && re->func.get_pixels)
if (im->native.data && direct && engine->func.get_pixels)
im->direct = EINA_TRUE;
else
im->direct = EINA_FALSE;
@ -2044,6 +2042,7 @@ eng_image_can_region_get(void *engine EINA_UNUSED, void *image)
{
Evas_GL_Image *gim = image;
Image_Entry *im;
if (!gim) return EINA_FALSE;
im = (Image_Entry *)gim->im;
if (!im) return EINA_FALSE;
@ -2056,7 +2055,7 @@ eng_image_max_size_get(void *engine, int *maxw, int *maxh)
{
Evas_Engine_GL_Context *gl_context;
gl_context = gl_generic_context_get(engine);
gl_context = gl_generic_context_find(engine);
if (maxw) *maxw = gl_context->shared->info.max_texture_size;
if (maxh) *maxh = gl_context->shared->info.max_texture_size;
}
@ -2689,7 +2688,7 @@ eng_image_data_map(void *engine, void **image, Eina_Rw_Slice *slice,
Evas_Colorspace cspace, Efl_Gfx_Buffer_Access_Mode mode,
int plane)
{
Render_Output_GL_Generic *re = engine;
Render_Engine_GL_Generic *re = engine;
Evas_GL_Image_Data_Map *map = NULL;
Evas_GL_Image *glim, *glim2 = NULL;
Eina_Bool ok = EINA_FALSE;
@ -3021,7 +3020,7 @@ eng_image_surface_noscale_new(void *engine, int w, int h, int alpha)
{
Evas_Engine_GL_Context *gl_context;
gl_context = gl_generic_context_get(engine);
gl_context = gl_generic_context_find(engine);
return evas_gl_common_image_surface_noscale_new(gl_context, w, h, alpha);
}
@ -3038,13 +3037,11 @@ eng_image_surface_noscale_region_get(void *engine EINA_UNUSED, void *image, int
*h = im->h;
return;
}
else
{
*x = 0;
*y = 0;
*w = 0;
*h = 0;
}
*x = 0;
*y = 0;
*w = 0;
*h = 0;
}
//------------------------------------------------//