summaryrefslogtreecommitdiff
path: root/src/examples
diff options
context:
space:
mode:
authorOleksandr Shcherbina <o.shcherbina@samsung.com>2015-04-06 14:10:28 +0900
committerChunEon Park <chuneon.park@samsung.com>2015-04-06 14:10:28 +0900
commitbc8dfbb1ef88127f61a86d4a8719e33275fb4629 (patch)
tree9fddac596bea558946b5a953d68e0b4613e5d01d /src/examples
parent5a5322706eb21ea5753d1bc7634098d9e5e50887 (diff)
[evas/evas_3D] Billboard mechanism
Summary: Add pointer to target billboard node in Evas_3D_Node Skip set flags change orientation for billboard node Add method node_billboard_update to use it for change orientation during traverse by nodes Split API evas_3d_node_look_at_set to have possibility change orientation of node without set flags Reviewers: cedric, Hermet Subscribers: cedric Differential Revision: https://phab.enlightenment.org/D2245
Diffstat (limited to 'src/examples')
-rw-r--r--src/examples/evas/Makefile.am1
-rw-r--r--src/examples/evas/evas-3d-shadows.c150
-rw-r--r--src/examples/evas/resources/images/billboard.pngbin0 -> 26403 bytes
3 files changed, 128 insertions, 23 deletions
diff --git a/src/examples/evas/Makefile.am b/src/examples/evas/Makefile.am
index 0218472..6a47303 100644
--- a/src/examples/evas/Makefile.am
+++ b/src/examples/evas/Makefile.am
@@ -359,6 +359,7 @@ resources/images/four_NM_height.tga \
359resources/images/rocks_NM_height.tga \ 359resources/images/rocks_NM_height.tga \
360resources/images/grid.png \ 360resources/images/grid.png \
361resources/images/grid_n.png \ 361resources/images/grid_n.png \
362resources/images/billboard.png \
362resources/models/mesh_for_mmap.eet \ 363resources/models/mesh_for_mmap.eet \
363resources/models/mesh_for_mmap.md2 \ 364resources/models/mesh_for_mmap.md2 \
364resources/models/mesh_for_mmap.obj \ 365resources/models/mesh_for_mmap.obj \
diff --git a/src/examples/evas/evas-3d-shadows.c b/src/examples/evas/evas-3d-shadows.c
index c1eb087..701a474 100644
--- a/src/examples/evas/evas-3d-shadows.c
+++ b/src/examples/evas/evas-3d-shadows.c
@@ -1,9 +1,11 @@
1/** 1/**
2 * This example illustrating use of shadows in the scene and callbacks(clicked, collision). 2 * This example illustrating use of shadows, callbacks(clicked, collision),
3 * and technic of the billboard.
3 * Model and cube are clickable. Model detects collision with sphere. 4 * Model and cube are clickable. Model detects collision with sphere.
4 * Cube detects collision with sphere, model and cone. 5 * Cube detects collision with sphere, model and cone.
5 * @see evas_3d_scene_shadows_enable_set(Eina_Bool _shadows_enabled) 6 * @see evas_3d_scene_shadows_enable_set(Eina_Bool _shadows_enabled)
6 * @see evas_3d_object_callback_register 7 * @see evas_3d_object_callback_register
8 * @see evas_3d_billboard_set/get
7 * 9 *
8 * @verbatim 10 * @verbatim
9 * gcc -o evas-3d-shadows evas-3d-shadows.c evas-3d-primitives.c `pkg-config --libs --cflags efl evas ecore ecore-evas eo eina` -lm 11 * gcc -o evas-3d-shadows evas-3d-shadows.c evas-3d-primitives.c `pkg-config --libs --cflags efl evas ecore ecore-evas eo eina` -lm
@@ -37,7 +39,8 @@
37#define SPECULAR_LIGHT 1.0, 1.0, 1.0 39#define SPECULAR_LIGHT 1.0, 1.0, 1.0
38 40
39static const char *model_path = PACKAGE_EXAMPLES_DIR EVAS_MODEL_FOLDER "/sonic.md2"; 41static const char *model_path = PACKAGE_EXAMPLES_DIR EVAS_MODEL_FOLDER "/sonic.md2";
40 42static const char *image_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/sonic.png";
43static const char *b_image_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/billboard.png";
41static const vec2 tex_scale = {1, 1}; 44static const vec2 tex_scale = {1, 1};
42static const vec2 fence_tex_scale = {80, 6}; 45static const vec2 fence_tex_scale = {80, 6};
43 46
@@ -89,6 +92,7 @@ typedef struct _Body_3D
89 Eo *material; 92 Eo *material;
90 Eo *mesh; 93 Eo *mesh;
91 Eo *node; 94 Eo *node;
95 Eo *texture;
92} Body_3D; 96} Body_3D;
93 97
94typedef struct _Scene_Data 98typedef struct _Scene_Data
@@ -99,6 +103,7 @@ typedef struct _Scene_Data
99 Eo *camera; 103 Eo *camera;
100 Eo *light_node; 104 Eo *light_node;
101 Eo *light; 105 Eo *light;
106 Eo *mediator;
102 107
103 Body_3D sphere; 108 Body_3D sphere;
104 Body_3D cube; 109 Body_3D cube;
@@ -107,6 +112,9 @@ typedef struct _Scene_Data
107 Body_3D model; 112 Body_3D model;
108 Body_3D cone; 113 Body_3D cone;
109 Body_3D fence; 114 Body_3D fence;
115 Body_3D billboard;
116
117 Eina_Bool init;
110} Scene_Data; 118} Scene_Data;
111 119
112static void 120static void
@@ -114,23 +122,37 @@ _show_help()
114{ 122{
115 fprintf(stdout, "Press 'w'/'s' key to move up/down object\n"); 123 fprintf(stdout, "Press 'w'/'s' key to move up/down object\n");
116 fprintf(stdout, "Press 'a'/'d' key to move left/right object\n"); 124 fprintf(stdout, "Press 'a'/'d' key to move left/right object\n");
117 fprintf(stdout, "Press 'q'/'e' key to to move near/far object\n"); 125 fprintf(stdout, "Press 'q'/'e' key to move near/far object\n");
118 fprintf(stdout, "Cude and model can be moved.\n"); 126 fprintf(stdout, "Cude and model can be moved.\n");
119 fprintf(stdout, "Cube detects intersection with model, sphere, cone\n"); 127 fprintf(stdout, "Cube detects intersection with model, sphere, cone\n");
120 fprintf(stdout, "Model detects intersection with sphere\n"); 128 fprintf(stdout, "Model detects intersection with sphere\n");
129 fprintf(stdout, "Press '1'/'2' key to change kind of node - billboard/normal model\n");
130 fprintf(stdout, "Press Up/Down key to change position of camera\n");
131 fprintf(stdout, "Press 'i' key to return initial view of scene\n");
121} 132}
122 133
123static Eina_Bool 134static Eina_Bool
124_animate_scene(void *data) 135_animate_scene(void *data)
125{ 136{
126 static int frame = 0; 137 static float angle = 0;
127 Body_3D *body = (Body_3D *)data; 138 Evas_Real x, y, z;
128 139 Scene_Data *scene = (Scene_Data *)data;
129 eo_do(body->node, evas_3d_node_mesh_frame_set(body->mesh, frame)); 140 if (scene->init)
130 141 {
131 /*frame += 32;*/ 142 eo_do(scene->mediator,
132 143 evas_3d_node_position_get(EVAS_3D_SPACE_PARENT, &x, &y, &z));
133 if (frame > 256 * 20) frame = 0; 144 eo_do(scene->mediator,
145 evas_3d_node_position_set(sin(angle) * 20 , y , cos(angle) * 20),
146 evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 3.0, 0.0,
147 EVAS_3D_SPACE_PARENT, 0.0, 5.0, 0.0));
148 angle += 0.005;
149 if (angle > 360) angle = 0.0;
150 }
151 else
152 eo_do(scene->mediator,
153 evas_3d_node_position_set(0.0, 6.0, 12.0),
154 evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 3.0, 0.0,
155 EVAS_3D_SPACE_PARENT, 0.0, 5.0, 0.0));
134 156
135 return EINA_TRUE; 157 return EINA_TRUE;
136} 158}
@@ -241,6 +263,9 @@ _fence_setup(Body_3D *fence)
241 evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE), 263 evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE),
242 evas_3d_material_enable_set(EVAS_3D_MATERIAL_NORMAL, EINA_TRUE), 264 evas_3d_material_enable_set(EVAS_3D_MATERIAL_NORMAL, EINA_TRUE),
243 evas_3d_material_texture_set(EVAS_3D_MATERIAL_NORMAL, texture1), 265 evas_3d_material_texture_set(EVAS_3D_MATERIAL_NORMAL, texture1),
266 evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, 1.0, 1.0, 1.0, 1.0),
267 evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, 1.0, 1.0, 1.0, 1.0),
268 evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR, 1.0, 1.0, 1.0, 1.0),
244 evas_3d_material_shininess_set(100.0)); 269 evas_3d_material_shininess_set(100.0));
245 fence->mesh = eo_add(EVAS_3D_MESH_CLASS, evas); 270 fence->mesh = eo_add(EVAS_3D_MESH_CLASS, evas);
246 evas_3d_add_cylinder_frame(fence->mesh, 0, 50, fence_tex_scale); 271 evas_3d_add_cylinder_frame(fence->mesh, 0, 50, fence_tex_scale);
@@ -292,9 +317,9 @@ _box_setup(Body_3D *box)
292static void 317static void
293_model_setup(Body_3D *model) 318_model_setup(Body_3D *model)
294{ 319{
295 Eo *texture = eo_add(EVAS_3D_TEXTURE_CLASS, evas); 320 model->texture = eo_add(EVAS_3D_TEXTURE_CLASS, evas);
296 eo_do(texture, 321 eo_do(model->texture,
297 evas_3d_texture_file_set(PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/sonic.png", NULL), 322 evas_3d_texture_file_set(image_path, NULL),
298 evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_NEAREST, 323 evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_NEAREST,
299 EVAS_3D_TEXTURE_FILTER_NEAREST), 324 EVAS_3D_TEXTURE_FILTER_NEAREST),
300 evas_3d_texture_wrap_set(EVAS_3D_WRAP_MODE_REPEAT, 325 evas_3d_texture_wrap_set(EVAS_3D_WRAP_MODE_REPEAT,
@@ -302,8 +327,8 @@ _model_setup(Body_3D *model)
302 model->material = eo_add(EVAS_3D_MATERIAL_CLASS, evas); 327 model->material = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
303 328
304 eo_do(model->material, 329 eo_do(model->material,
305 evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, texture), 330 evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, model->texture),
306 evas_3d_material_texture_set(EVAS_3D_MATERIAL_AMBIENT, texture), 331 evas_3d_material_texture_set(EVAS_3D_MATERIAL_AMBIENT, model->texture),
307 evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE), 332 evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE),
308 evas_3d_material_enable_set(EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE), 333 evas_3d_material_enable_set(EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE),
309 evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE), 334 evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE),
@@ -311,7 +336,6 @@ _model_setup(Body_3D *model)
311 336
312 337
313 model->mesh = eo_add(EVAS_3D_MESH_CLASS, evas); 338 model->mesh = eo_add(EVAS_3D_MESH_CLASS, evas);
314
315 eo_do(model->mesh, 339 eo_do(model->mesh,
316 efl_file_set(model_path, NULL), 340 efl_file_set(model_path, NULL),
317 evas_3d_mesh_frame_material_set(0, model->material), 341 evas_3d_mesh_frame_material_set(0, model->material),
@@ -326,24 +350,69 @@ _model_setup(Body_3D *model)
326} 350}
327 351
328static void 352static void
353_billboard_setup(Scene_Data *data)
354{
355 data->billboard.texture = eo_add(EVAS_3D_TEXTURE_CLASS, evas);
356 eo_do(data->billboard.texture,
357 evas_3d_texture_file_set(b_image_path, NULL),
358 evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_NEAREST,
359 EVAS_3D_TEXTURE_FILTER_NEAREST),
360 evas_3d_texture_wrap_set(EVAS_3D_WRAP_MODE_REPEAT,
361 EVAS_3D_WRAP_MODE_REPEAT));
362
363 data->billboard.mesh = eo_add(EVAS_3D_MESH_CLASS, evas);
364 evas_3d_add_square_frame(data->billboard.mesh, 0);
365
366 _body_material_set(&(data->billboard), 1.0, 1.0, 1.0);
367
368 eo_do(data->billboard.material,
369 evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, data->billboard.texture));
370
371 eo_do(data->billboard.mesh,
372 evas_3d_mesh_frame_material_set(0, data->billboard.material),
373 evas_3d_mesh_alpha_func_set(EVAS_3D_COMPARISON_GREATER, 0),
374 evas_3d_mesh_alpha_test_enable_set(EINA_TRUE),
375 evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_DIFFUSE),
376 evas_3d_mesh_blending_enable_set(EINA_TRUE),
377 evas_3d_mesh_blending_func_set(EVAS_3D_BLEND_SRC_ALPHA,
378 EVAS_3D_BLEND_ONE_MINUS_SRC_ALPHA));
379
380 data->billboard.node = eo_add(EVAS_3D_NODE_CLASS, evas,
381 evas_3d_node_constructor(EVAS_3D_NODE_TYPE_MESH));
382 eo_do(data->billboard.node,
383 evas_3d_node_mesh_add(data->billboard.mesh),
384 evas_3d_node_position_set(0.0, 2.0, 0.0),
385 evas_3d_node_scale_set(2.2, 4.6, 4.0));
386
387 eo_do(data->billboard.node,
388 evas_3d_node_billboard_target_set(data->mediator));
389}
390
391static void
329_camera_setup(Scene_Data *data) 392_camera_setup(Scene_Data *data)
330{ 393{
331 data->camera = eo_add(EVAS_3D_CAMERA_CLASS, evas); 394 data->camera = eo_add(EVAS_3D_CAMERA_CLASS, evas);
395 data->mediator = eo_add(EVAS_3D_NODE_CLASS, evas,
396 evas_3d_node_constructor(EVAS_3D_NODE_TYPE_NODE));
332 397
333 eo_do(data->camera, 398 eo_do(data->camera,
334 evas_3d_camera_projection_perspective_set(50.0, 1.0, 2.0, 50.0)); 399 evas_3d_camera_projection_perspective_set(50.0, 1.0, 2.0, 100.0));
335 400
336 data->camera_node = 401 data->camera_node =
337 eo_add(EVAS_3D_NODE_CLASS, evas, 402 eo_add(EVAS_3D_NODE_CLASS, evas,
338 evas_3d_node_constructor(EVAS_3D_NODE_TYPE_CAMERA)); 403 evas_3d_node_constructor(EVAS_3D_NODE_TYPE_CAMERA));
339 404
340 eo_do(data->camera_node, 405 eo_do(data->camera_node,
341 evas_3d_node_camera_set(data->camera), 406 evas_3d_node_camera_set(data->camera));
407
408
409 eo_do(data->mediator,
342 evas_3d_node_position_set(0.0, 6.0, 12.0), 410 evas_3d_node_position_set(0.0, 6.0, 12.0),
343 evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 3.0, 0.0, 411 evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 3.0, 0.0,
344 EVAS_3D_SPACE_PARENT, 0.0, 5.0, 0.0)); 412 EVAS_3D_SPACE_PARENT, 0.0, 5.0, 0.0));
345 413
346 eo_do(data->root_node, evas_3d_node_member_add(data->camera_node)); 414 eo_do(data->mediator, evas_3d_node_member_add(data->camera_node));
415 eo_do(data->root_node, evas_3d_node_member_add(data->mediator));
347} 416}
348 417
349static void 418static void
@@ -362,7 +431,7 @@ _light_setup(Scene_Data *data)
362 evas_3d_node_constructor(EVAS_3D_NODE_TYPE_LIGHT)); 431 evas_3d_node_constructor(EVAS_3D_NODE_TYPE_LIGHT));
363 eo_do(data->light_node, 432 eo_do(data->light_node,
364 evas_3d_node_light_set(data->light), 433 evas_3d_node_light_set(data->light),
365 evas_3d_node_position_set(50.0, 50.0, 20.0), 434 evas_3d_node_position_set(50.0, 50.0, 70.0),
366 evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 15.0, 0.0, -5.0, 435 evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 15.0, 0.0, -5.0,
367 EVAS_3D_SPACE_PARENT, 0.0, 0.0, 1.0)); 436 EVAS_3D_SPACE_PARENT, 0.0, 0.0, 1.0));
368 eo_do(data->root_node, evas_3d_node_member_add(data->light_node)); 437 eo_do(data->root_node, evas_3d_node_member_add(data->light_node));
@@ -371,6 +440,8 @@ _light_setup(Scene_Data *data)
371static void 440static void
372_scene_setup(Scene_Data *data) 441_scene_setup(Scene_Data *data)
373{ 442{
443 data->init = EINA_FALSE;
444
374 data->scene = eo_add(EVAS_3D_SCENE_CLASS, evas); 445 data->scene = eo_add(EVAS_3D_SCENE_CLASS, evas);
375 446
376 eo_do(data->scene, 447 eo_do(data->scene,
@@ -392,8 +463,9 @@ _scene_setup(Scene_Data *data)
392 _model_setup(&data->model); 463 _model_setup(&data->model);
393 _cone_setup(&data->cone); 464 _cone_setup(&data->cone);
394 _fence_setup(&data->fence); 465 _fence_setup(&data->fence);
466 _billboard_setup(data);
395 467
396 eo_do(data->root_node, 468 eo_do(data->root_node,
397 evas_3d_node_member_add(data->sphere.node), 469 evas_3d_node_member_add(data->sphere.node),
398 evas_3d_node_member_add(data->cube.node), 470 evas_3d_node_member_add(data->cube.node),
399 evas_3d_node_member_add(data->cylinder.node), 471 evas_3d_node_member_add(data->cylinder.node),
@@ -412,6 +484,7 @@ static void
412_on_key_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event_info) 484_on_key_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event_info)
413{ 485{
414 Evas_Event_Key_Down *ev = event_info; 486 Evas_Event_Key_Down *ev = event_info;
487 Scene_Data *scene = (Scene_Data *)data;
415 if (!strcmp("w", ev->key)) 488 if (!strcmp("w", ev->key))
416 { 489 {
417 Evas_Real x, y, z; 490 Evas_Real x, y, z;
@@ -448,6 +521,34 @@ _on_key_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *eo EINA_U
448 eo_do(choosed_node, evas_3d_node_position_get(EVAS_3D_SPACE_PARENT, &x, &y, &z)); 521 eo_do(choosed_node, evas_3d_node_position_get(EVAS_3D_SPACE_PARENT, &x, &y, &z));
449 eo_do(choosed_node, evas_3d_node_position_set(x, y, z + STEP)); 522 eo_do(choosed_node, evas_3d_node_position_set(x, y, z + STEP));
450 } 523 }
524 else if(!strcmp("1", ev->key))
525 {
526 eo_do(scene->root_node, evas_3d_node_member_del(scene->model.node));
527 eo_do(scene->root_node, evas_3d_node_member_add(scene->billboard.node));
528 }
529 else if(!strcmp("2", ev->key))
530 {
531 eo_do(scene->root_node, evas_3d_node_member_add(scene->model.node));
532 eo_do(scene->root_node, evas_3d_node_member_del(scene->billboard.node));
533 }
534 else if(!strcmp("Up", ev->key))
535 {
536 Evas_Real x, y, z;
537 eo_do(scene->camera_node, evas_3d_node_position_get(EVAS_3D_SPACE_PARENT, &x, &y, &z));
538 eo_do(scene->camera_node, evas_3d_node_position_set(x, y, z + STEP));
539 }
540 else if(!strcmp("Down", ev->key))
541 {
542 Evas_Real x, y, z;
543 eo_do(scene->camera_node, evas_3d_node_position_get(EVAS_3D_SPACE_PARENT, &x, &y, &z));
544 eo_do(scene->camera_node, evas_3d_node_position_set(x, y, z - STEP));
545 }
546 else if (!strcmp("i", ev->key))
547 {
548 scene->init = !scene->init;
549 eo_do(scene->model.node, evas_3d_node_position_set(0.0, 0.0, 0.0));
550 eo_do(scene->billboard.node, evas_3d_node_position_set(0.0, 2.0, 0.0));
551 }
451 else 552 else
452 { 553 {
453 _show_help(); 554 _show_help();
@@ -551,12 +652,15 @@ main(void)
551 eo_do(data.model.node, eo_event_callback_add(EVAS_3D_OBJECT_EVENT_CLICKED, _cb_clicked, NULL)); 652 eo_do(data.model.node, eo_event_callback_add(EVAS_3D_OBJECT_EVENT_CLICKED, _cb_clicked, NULL));
552 eo_do(data.model.node, eo_event_callback_add(EVAS_3D_OBJECT_EVENT_COLLISION, _cb_collision, nodes1)); 653 eo_do(data.model.node, eo_event_callback_add(EVAS_3D_OBJECT_EVENT_COLLISION, _cb_collision, nodes1));
553 654
655 eo_do(data.billboard.node, eo_event_callback_add(EVAS_3D_OBJECT_EVENT_CLICKED, _cb_clicked, NULL));
656 eo_do(data.billboard.node, eo_event_callback_add(EVAS_3D_OBJECT_EVENT_COLLISION, _cb_collision, nodes1));
657
554 evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_DOWN, _on_mouse_down, &data); 658 evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_DOWN, _on_mouse_down, &data);
555 evas_object_event_callback_add(image, EVAS_CALLBACK_KEY_DOWN, _on_key_down, &data); 659 evas_object_event_callback_add(image, EVAS_CALLBACK_KEY_DOWN, _on_key_down, &data);
556 660
557 /* Add animator. */ 661 /* Add animator. */
558 ecore_animator_frametime_set(0.008); 662 ecore_animator_frametime_set(0.008);
559 anim = ecore_animator_add(_animate_scene, &data.model); 663 anim = ecore_animator_add(_animate_scene, &data);
560 664
561 /* Enter main loop. */ 665 /* Enter main loop. */
562 ecore_main_loop_begin(); 666 ecore_main_loop_begin();
diff --git a/src/examples/evas/resources/images/billboard.png b/src/examples/evas/resources/images/billboard.png
new file mode 100644
index 0000000..0a6915d
--- /dev/null
+++ b/src/examples/evas/resources/images/billboard.png
Binary files differ