examples: Fix evas_canvas3d_proxy (temporary solution)

It was broken after all the changes in Evas.Image.
Since buffer map/unmap is not fully completed (GL support is
still to do), I added a quick #ifdef to switch between EO and
Legacy APIs.

Thanks @jackdanielz for the report.
This commit is contained in:
Jean-Philippe Andre 2016-03-29 14:59:50 +09:00
parent c41bae817c
commit caa999c5f9
1 changed files with 26 additions and 6 deletions

View File

@ -22,6 +22,9 @@
#define IMG_WIDTH 256
#define IMG_HEIGHT 256
// TODO: remove this when map/unmap are fully supported (GL engine)
#undef USE_EO_IMAGE
typedef struct _Scene_Data
{
Eo *scene;
@ -66,7 +69,7 @@ _animate_scene(void *data)
static float angle = 0.0f;
Scene_Data *scene = (Scene_Data *)data;
unsigned int *pixels;
int i, j, stride;
int i, j, stride, length;
angle += 0.5;
@ -75,9 +78,15 @@ _animate_scene(void *data)
/* Rotate */
if (angle > 360.0) angle -= 360.0f;
//pixels = efl_gfx_buffer_get(source, EINA_TRUE, NULL, NULL, NULL, &stride, NULL, NULL, NULL, NULL, NULL, NULL);
#ifdef USE_EO_IMAGE
pixels = efl_gfx_buffer_map(source, &length, EFL_GFX_BUFFER_ACCESS_MODE_WRITE, 0, 0, 0, 0,
EFL_GFX_COLORSPACE_ARGB8888, &stride);
if (!pixels) return EINA_TRUE;
#else
(void) length;
pixels = evas_object_image_data_get(source, EINA_TRUE);
stride = evas_object_image_stride_get(source);
#endif
for (i = 0; i < IMG_HEIGHT; i++)
{
@ -89,10 +98,13 @@ _animate_scene(void *data)
}
}
//efl_gfx_buffer_set(source, pixels, 0, 0, stride, 0, 0, 0, 0, 0, 0);
//evas_object_image_data_update_add(source, 0, 0, IMG_WIDTH, IMG_HEIGHT);
#ifdef USE_EO_IMAGE
efl_gfx_buffer_unmap(source, pixels, length);
efl_gfx_buffer_update_add(source, 0, 0, IMG_WIDTH, IMG_HEIGHT);
#else
evas_object_image_data_set(source, pixels);
evas_object_image_data_update_add(source, 0, 0, IMG_WIDTH, IMG_HEIGHT);
#endif
return EINA_TRUE;
}
@ -208,11 +220,19 @@ main(void)
efl_gfx_visible_set(background, EINA_TRUE);
/* Add a background image. */
source = evas_object_image_filled_add(evas);
efl_gfx_view_size_set(source, IMG_WIDTH, IMG_HEIGHT);
#ifdef USE_EO_IMAGE
source = eo_add(EFL_CANVAS_IMAGE_CLASS, evas);
efl_gfx_buffer_data_set(source, NULL, WIDTH, HEIGHT, 0, EFL_GFX_COLORSPACE_ARGB8888);
efl_gfx_position_set(source, (WIDTH / 2), (HEIGHT / 2));
efl_gfx_size_set(source, (WIDTH / 2), (HEIGHT / 2));
efl_gfx_visible_set(source, EINA_TRUE);
#else
source = evas_object_image_filled_add(evas);
evas_object_image_size_set(source, IMG_WIDTH, IMG_HEIGHT);
evas_object_move(source, (WIDTH / 2), (HEIGHT / 2));
evas_object_resize(source, (WIDTH / 2), (HEIGHT / 2));
evas_object_show(source);
#endif
/* Add an image object for 3D scene rendering. */
image = eo_add(EFL_CANVAS_SCENE3D_CLASS, evas);