aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/extantz/Evas_3D_demo.c
diff options
context:
space:
mode:
authorDavid Walter Seikel2014-05-04 22:35:22 +1000
committerDavid Walter Seikel2014-05-04 22:35:22 +1000
commitf93abeb98d74b5dea266347e668aa6f88e96d83b (patch)
tree43b74eeccd136f357992432d76b9db75e27faa90 /src/extantz/Evas_3D_demo.c
parentluaopen_widget is surplus to requirements. (diff)
downloadSledjHamr-f93abeb98d74b5dea266347e668aa6f88e96d83b.zip
SledjHamr-f93abeb98d74b5dea266347e668aa6f88e96d83b.tar.gz
SledjHamr-f93abeb98d74b5dea266347e668aa6f88e96d83b.tar.bz2
SledjHamr-f93abeb98d74b5dea266347e668aa6f88e96d83b.tar.xz
Combine eo_add() and eo_do(), plus related cleanups.
Diffstat (limited to 'src/extantz/Evas_3D_demo.c')
-rw-r--r--src/extantz/Evas_3D_demo.c237
1 files changed, 108 insertions, 129 deletions
diff --git a/src/extantz/Evas_3D_demo.c b/src/extantz/Evas_3D_demo.c
index 95b2f2f..f9a5c27 100644
--- a/src/extantz/Evas_3D_demo.c
+++ b/src/extantz/Evas_3D_demo.c
@@ -333,27 +333,24 @@ Eina_Bool _animate_scene(globals *ourGlobals)
333static void 333static void
334_camera_setup(globals *ourGlobals, Scene_Data *scene) 334_camera_setup(globals *ourGlobals, Scene_Data *scene)
335{ 335{
336 scene->camera = eo_add(EVAS_3D_CAMERA_CLASS, ourGlobals->evas); 336 scene->camera = eo_add(EVAS_3D_CAMERA_CLASS, ourGlobals->evas,
337 eo_do(scene->camera,
338 evas_3d_camera_projection_perspective_set(60.0, 1.0, 1.0, 500.0) 337 evas_3d_camera_projection_perspective_set(60.0, 1.0, 1.0, 500.0)
339 ); 338 );
340 339
341 scene->camera_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_CAMERA); 340 scene->camera_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_CAMERA);
342 eo_do(scene->camera_node, 341 eo_do(scene->camera_node,
343 evas_3d_node_camera_set(scene->camera) 342 evas_3d_node_camera_set(scene->camera),
344 );
345 eo_do(scene->root_node, evas_3d_node_member_add(scene->camera_node));
346 eo_do(scene->camera_node,
347 evas_3d_node_position_set(50.0, 0.0, 20.0), 343 evas_3d_node_position_set(50.0, 0.0, 20.0),
348 evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 0.0, 20.0, EVAS_3D_SPACE_PARENT, 0.0, 0.0, 1.0) 344 evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 0.0, 20.0, EVAS_3D_SPACE_PARENT, 0.0, 0.0, 1.0)
349 ); 345 );
346
347 eo_do(scene->root_node, evas_3d_node_member_add(scene->camera_node));
350} 348}
351 349
352static void 350static void
353_light_setup(globals *ourGlobals, Scene_Data *scene) 351_light_setup(globals *ourGlobals, Scene_Data *scene)
354{ 352{
355 scene->light = eo_add(EVAS_3D_LIGHT_CLASS, ourGlobals->evas); 353 scene->light = eo_add(EVAS_3D_LIGHT_CLASS, ourGlobals->evas,
356 eo_do(scene->light,
357 evas_3d_light_ambient_set(1.0, 1.0, 1.0, 1.0), 354 evas_3d_light_ambient_set(1.0, 1.0, 1.0, 1.0),
358 evas_3d_light_diffuse_set(1.0, 1.0, 1.0, 1.0), 355 evas_3d_light_diffuse_set(1.0, 1.0, 1.0, 1.0),
359 evas_3d_light_specular_set(1.0, 1.0, 1.0, 1.0), 356 evas_3d_light_specular_set(1.0, 1.0, 1.0, 1.0),
@@ -362,15 +359,13 @@ _light_setup(globals *ourGlobals, Scene_Data *scene)
362 359
363 scene->light_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_LIGHT); 360 scene->light_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_LIGHT);
364 eo_do(scene->light_node, 361 eo_do(scene->light_node,
365 evas_3d_node_light_set(scene->light) 362 evas_3d_node_light_set(scene->light),
366 );
367 eo_do(scene->root_node,
368 evas_3d_node_member_add(scene->light_node)
369 );
370 eo_do(scene->light_node,
371 evas_3d_node_position_set(1000.0, 0.0, 1000.0), 363 evas_3d_node_position_set(1000.0, 0.0, 1000.0),
372 evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_3D_SPACE_PARENT, 0.0, 1.0, 0.0) 364 evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_3D_SPACE_PARENT, 0.0, 1.0, 0.0)
373 ); 365 );
366
367 eo_do(scene->root_node, evas_3d_node_member_add(scene->light_node));
368
374} 369}
375 370
376static void _cube_setup(globals *ourGlobals, Scene_Data *scene) 371static void _cube_setup(globals *ourGlobals, Scene_Data *scene)
@@ -378,10 +373,20 @@ static void _cube_setup(globals *ourGlobals, Scene_Data *scene)
378 char buf[PATH_MAX]; 373 char buf[PATH_MAX];
379 374
380 // Setup cube materials. 375 // Setup cube materials.
381 scene->material0 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas); 376 scene->texture0 = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas,
382 scene->material1 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas); 377 evas_3d_texture_data_set(EVAS_3D_COLOR_FORMAT_RGBA, EVAS_3D_PIXEL_FORMAT_8888, 4, 4, &pixels0[0])
378 );
379
380 scene->texture1 = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas,
381 evas_3d_texture_data_set(EVAS_3D_COLOR_FORMAT_RGBA, EVAS_3D_PIXEL_FORMAT_8888, 4, 4, &pixels1[0])
382 );
383
384 snprintf(buf, sizeof(buf), "%s/normal_lego.png", elm_app_data_dir_get());
385 scene->texture_normal = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas,
386 evas_3d_texture_file_set(buf, NULL)
387 );
383 388
384 eo_do(scene->material0, 389 scene->material0 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas,
385 evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE), 390 evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE),
386 evas_3d_material_enable_set(EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE), 391 evas_3d_material_enable_set(EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE),
387 evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE), 392 evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE),
@@ -390,10 +395,11 @@ static void _cube_setup(globals *ourGlobals, Scene_Data *scene)
390 evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, 0.2, 0.2, 0.2, 1.0), 395 evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, 0.2, 0.2, 0.2, 1.0),
391 evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, 0.8, 0.8, 0.8, 1.0), 396 evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, 0.8, 0.8, 0.8, 1.0),
392 evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR, 1.0, 1.0, 1.0, 1.0), 397 evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR, 1.0, 1.0, 1.0, 1.0),
393 evas_3d_material_shininess_set(100.0) 398 evas_3d_material_shininess_set(100.0),
394 ); 399 evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture0)
400 );
395 401
396 eo_do(scene->material1, 402 scene->material1 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas,
397 evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE), 403 evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE),
398 evas_3d_material_enable_set(EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE), 404 evas_3d_material_enable_set(EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE),
399 evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE), 405 evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE),
@@ -402,29 +408,14 @@ static void _cube_setup(globals *ourGlobals, Scene_Data *scene)
402 evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, 0.2, 0.2, 0.2, 1.0), 408 evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, 0.2, 0.2, 0.2, 1.0),
403 evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, 0.8, 0.8, 0.8, 1.0), 409 evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, 0.8, 0.8, 0.8, 1.0),
404 evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR, 1.0, 1.0, 1.0, 1.0), 410 evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR, 1.0, 1.0, 1.0, 1.0),
405 evas_3d_material_shininess_set(100.0) 411 evas_3d_material_shininess_set(100.0),
406 );
407 412
408 scene->texture0 = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas); 413 evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture1),
409 scene->texture1 = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas); 414 evas_3d_material_texture_set(EVAS_3D_MATERIAL_NORMAL, scene->texture_normal)
410 scene->texture_normal = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas);
411
412 eo_do(scene->texture0,
413 evas_3d_texture_data_set(EVAS_3D_COLOR_FORMAT_RGBA, EVAS_3D_PIXEL_FORMAT_8888, 4, 4, &pixels0[0])
414 ); 415 );
415 eo_do(scene->texture1,
416 evas_3d_texture_data_set(EVAS_3D_COLOR_FORMAT_RGBA, EVAS_3D_PIXEL_FORMAT_8888, 4, 4, &pixels1[0])
417 );
418 snprintf(buf, sizeof(buf), "%s/normal_lego.png", elm_app_data_dir_get());
419 eo_do(scene->texture_normal, evas_3d_texture_file_set(buf, NULL));
420
421 eo_do(scene->material0, evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture0));
422 eo_do(scene->material1, evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture1));
423 eo_do(scene->material1, evas_3d_material_texture_set(EVAS_3D_MATERIAL_NORMAL, scene->texture_normal));
424 416
425 // Setup CUBE mesh. 417 // Setup CUBE mesh.
426 scene->mesh = eo_add(EVAS_3D_MESH_CLASS, ourGlobals->evas); 418 scene->mesh = eo_add(EVAS_3D_MESH_CLASS, ourGlobals->evas,
427 eo_do(scene->mesh,
428 evas_3d_mesh_vertex_count_set(24), 419 evas_3d_mesh_vertex_count_set(24),
429 evas_3d_mesh_frame_add(0), 420 evas_3d_mesh_frame_add(0),
430 421
@@ -443,13 +434,15 @@ static void _cube_setup(globals *ourGlobals, Scene_Data *scene)
443 evas_3d_mesh_frame_add(20), 434 evas_3d_mesh_frame_add(20),
444 evas_3d_mesh_frame_material_set(20, scene->material1) 435 evas_3d_mesh_frame_material_set(20, scene->material1)
445 ); 436 );
437
446 scene->mesh_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_MESH); 438 scene->mesh_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_MESH);
447 eo_do(scene->root_node, evas_3d_node_member_add(scene->mesh_node));
448 eo_do(scene->mesh_node, 439 eo_do(scene->mesh_node,
449 eo_key_data_set("Name", "cube", NULL), 440 eo_key_data_set("Name", "cube", NULL),
450 evas_3d_node_position_set(40.0, 3.5, 23.0), 441 evas_3d_node_position_set(40.0, 3.5, 23.0),
451 evas_3d_node_mesh_add(scene->mesh) 442 evas_3d_node_mesh_add(scene->mesh)
452 ); 443 );
444
445 eo_do(scene->root_node, evas_3d_node_member_add(scene->mesh_node));
453} 446}
454 447
455static void _sonic_setup(globals *ourGlobals, Scene_Data *scene) 448static void _sonic_setup(globals *ourGlobals, Scene_Data *scene)
@@ -457,26 +450,14 @@ static void _sonic_setup(globals *ourGlobals, Scene_Data *scene)
457 char buf[PATH_MAX]; 450 char buf[PATH_MAX];
458 451
459 // Setup an MD2 mesh. 452 // Setup an MD2 mesh.
460 scene->mesh2 = eo_add(EVAS_3D_MESH_CLASS, ourGlobals->evas);
461 snprintf(buf, sizeof(buf), "%s/sonic.md2", elm_app_data_dir_get());
462 eo_do(scene->mesh2,
463 evas_3d_mesh_file_set(EVAS_3D_MESH_FILE_TYPE_MD2, buf, NULL)
464 );
465
466 scene->material2 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas);
467 eo_do(scene->mesh2,
468 evas_3d_mesh_frame_material_set(0, scene->material2)
469 );
470
471 scene->texture2 = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas);
472 snprintf(buf, sizeof(buf), "%s/sonic.png", elm_app_data_dir_get()); 453 snprintf(buf, sizeof(buf), "%s/sonic.png", elm_app_data_dir_get());
473 eo_do(scene->texture2, 454 scene->texture2 = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas,
474 evas_3d_texture_file_set(buf, NULL), 455 evas_3d_texture_file_set(buf, NULL),
475 evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_NEAREST, EVAS_3D_TEXTURE_FILTER_NEAREST), 456 evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_NEAREST, EVAS_3D_TEXTURE_FILTER_NEAREST),
476 evas_3d_texture_wrap_set(EVAS_3D_WRAP_MODE_REPEAT, EVAS_3D_WRAP_MODE_REPEAT) 457 evas_3d_texture_wrap_set(EVAS_3D_WRAP_MODE_REPEAT, EVAS_3D_WRAP_MODE_REPEAT)
477 ); 458 );
478 459
479 eo_do(scene->material2, 460 scene->material2 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas,
480 evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture2), 461 evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture2),
481 462
482 evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE), 463 evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE),
@@ -490,18 +471,20 @@ static void _sonic_setup(globals *ourGlobals, Scene_Data *scene)
490 evas_3d_material_shininess_set(50.0) 471 evas_3d_material_shininess_set(50.0)
491 ); 472 );
492 473
493 scene->mesh2_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_MESH); 474 snprintf(buf, sizeof(buf), "%s/sonic.md2", elm_app_data_dir_get());
494 eo_do(scene->root_node, 475 scene->mesh2 = eo_add(EVAS_3D_MESH_CLASS, ourGlobals->evas,
495 evas_3d_node_member_add(scene->mesh2_node) 476 evas_3d_mesh_file_set(EVAS_3D_MESH_FILE_TYPE_MD2, buf, NULL),
477 evas_3d_mesh_frame_material_set(0, scene->material2),
478 evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG)
496 ); 479 );
480
481 scene->mesh2_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_MESH);
497 eo_do(scene->mesh2_node, 482 eo_do(scene->mesh2_node,
498 eo_key_data_set("Name", "sonic", NULL), 483 eo_key_data_set("Name", "sonic", NULL),
499 evas_3d_node_mesh_add(scene->mesh2) 484 evas_3d_node_mesh_add(scene->mesh2)
500 ); 485 );
501 486
502 eo_do(scene->mesh2, 487 eo_do(scene->root_node, evas_3d_node_member_add(scene->mesh2_node));
503 evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG)
504 );
505} 488}
506 489
507static void _earth_setup(globals *ourGlobals, Scene_Data *scene) 490static void _earth_setup(globals *ourGlobals, Scene_Data *scene)
@@ -509,81 +492,76 @@ static void _earth_setup(globals *ourGlobals, Scene_Data *scene)
509 char buf[PATH_MAX]; 492 char buf[PATH_MAX];
510 493
511 // Setup earth material. 494 // Setup earth material.
512 scene->material3 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas);
513
514 scene->texture_diffuse = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas);
515 snprintf(buf, sizeof(buf), "%s/EarthDiffuse.png", elm_app_data_dir_get()); 495 snprintf(buf, sizeof(buf), "%s/EarthDiffuse.png", elm_app_data_dir_get());
516 eo_do(scene->texture_diffuse, 496 scene->texture_diffuse = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas,
517 evas_3d_texture_file_set(buf, NULL), 497 evas_3d_texture_file_set(buf, NULL),
518 evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_LINEAR, EVAS_3D_TEXTURE_FILTER_LINEAR)); 498 evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_LINEAR, EVAS_3D_TEXTURE_FILTER_LINEAR)
519 eo_do(scene->material3, 499 );
520 evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture_diffuse),
521 500
522 evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE), 501 scene->material3 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas,
523 evas_3d_material_enable_set(EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE), 502 evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture_diffuse),
524 evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE),
525 503
526 evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, 0.01, 0.01, 0.01, 1.0), 504 evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE),
527 evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, 1.0, 1.0, 1.0, 1.0), 505 evas_3d_material_enable_set(EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE),
528 evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR, 1.0, 1.0, 1.0, 1.0), 506 evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE),
529 evas_3d_material_shininess_set(50.0)); 507
508 evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, 0.01, 0.01, 0.01, 1.0),
509 evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, 1.0, 1.0, 1.0, 1.0),
510 evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR, 1.0, 1.0, 1.0, 1.0),
511 evas_3d_material_shininess_set(50.0)
512 );
530 513
531 // Setup earth mesh. 514 // Setup earth mesh.
532 _sphere_init(100); 515 _sphere_init(100);
533 516
534 scene->mesh3 = eo_add(EVAS_3D_MESH_CLASS, ourGlobals->evas); 517 scene->mesh3 = eo_add(EVAS_3D_MESH_CLASS, ourGlobals->evas,
535 eo_do(scene->mesh3, 518 evas_3d_mesh_vertex_count_set(vertex_count),
536 evas_3d_mesh_vertex_count_set(vertex_count), 519 evas_3d_mesh_frame_add(0),
537 evas_3d_mesh_frame_add(0), 520 evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_POSITION, sizeof(vertex), &sphere_vertices[0].position),
538 evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_POSITION, sizeof(vertex), &sphere_vertices[0].position), 521 evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_NORMAL, sizeof(vertex), &sphere_vertices[0].normal),
539 evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_NORMAL, sizeof(vertex), &sphere_vertices[0].normal), 522 evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_TANGENT, sizeof(vertex), &sphere_vertices[0].tangent),
540 evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_TANGENT, sizeof(vertex), &sphere_vertices[0].tangent), 523 evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_COLOR, sizeof(vertex), &sphere_vertices[0].color),
541 evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_COLOR, sizeof(vertex), &sphere_vertices[0].color), 524 evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_TEXCOORD, sizeof(vertex), &sphere_vertices[0].texcoord),
542 evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_TEXCOORD, sizeof(vertex), &sphere_vertices[0].texcoord), 525
543 526 evas_3d_mesh_index_data_set(EVAS_3D_INDEX_FORMAT_UNSIGNED_SHORT, index_count, &sphere_indices[0]),
544 evas_3d_mesh_index_data_set(EVAS_3D_INDEX_FORMAT_UNSIGNED_SHORT, index_count, &sphere_indices[0]), 527 evas_3d_mesh_vertex_assembly_set(EVAS_3D_VERTEX_ASSEMBLY_TRIANGLES),
545 evas_3d_mesh_vertex_assembly_set(EVAS_3D_VERTEX_ASSEMBLY_TRIANGLES), 528 evas_3d_mesh_frame_material_set(0, scene->material3),
546 evas_3d_mesh_frame_material_set(0, scene->material3) 529
547 ); 530 evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_DIFFUSE)
531 );
548 532
549 scene->mesh3_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_MESH); 533 scene->mesh3_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_MESH);
550 eo_do(scene->root_node,
551 evas_3d_node_member_add(scene->mesh3_node)
552 );
553 eo_do(scene->mesh3_node, 534 eo_do(scene->mesh3_node,
554 eo_key_data_set("Name", "earth", NULL), 535 eo_key_data_set("Name", "earth", NULL),
555 evas_3d_node_position_set(40.0, -3.5, 23.0), 536 evas_3d_node_position_set(40.0, -3.5, 23.0),
556 evas_3d_node_mesh_add(scene->mesh3) 537 evas_3d_node_mesh_add(scene->mesh3)
557 ); 538 );
558 539
559 eo_do(scene->mesh3, 540 eo_do(scene->root_node, evas_3d_node_member_add(scene->mesh3_node));
560 evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_DIFFUSE)
561 );
562} 541}
563 542
564 543
565static void 544static void
566_scene_setup(globals *ourGlobals, Scene_Data *scene) 545_scene_setup(globals *ourGlobals, Scene_Data *scene)
567{ 546{
568 scene->scene = eo_add(EVAS_3D_SCENE_CLASS, ourGlobals->evas);
569 eo_do(scene->scene,
570 evas_3d_scene_size_set(512, 512),
571 evas_3d_scene_background_color_set(0.0, 0.0, 0.0, 0.0)
572 );
573
574 // TODO - I have no idea how this should work. 547 // TODO - I have no idea how this should work.
575 // It seems the people that wrote the examples don't know either. lol 548 // It seems the people that wrote the examples don't know either. lol
576// scene->root_node = eo_add(EVAS_3D_NODE_CLASS, ourGlobals->evas, EVAS_3D_NODE_TYPE_NODE); 549// scene->root_node = eo_add(EVAS_3D_NODE_CLASS, ourGlobals->evas, EVAS_3D_NODE_TYPE_NODE);
577 scene->root_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_NODE); 550 scene->root_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_NODE);
578 551
552 scene->scene = eo_add(EVAS_3D_SCENE_CLASS, ourGlobals->evas,
553 evas_3d_scene_root_node_set(scene->root_node),
554 evas_3d_scene_size_set(512, 512),
555 evas_3d_scene_background_color_set(0.0, 0.0, 0.0, 0.0)
556 );
557
579 _camera_setup(ourGlobals, scene); 558 _camera_setup(ourGlobals, scene);
580 _light_setup(ourGlobals, scene); 559 _light_setup(ourGlobals, scene);
581 _cube_setup(ourGlobals, scene); 560 _cube_setup(ourGlobals, scene);
582 _sonic_setup(ourGlobals, scene); 561 _sonic_setup(ourGlobals, scene);
583 _earth_setup(ourGlobals, scene); 562 _earth_setup(ourGlobals, scene);
584 563
585 eo_do(scene->scene, 564 eo_do(scene->scene,
586 evas_3d_scene_root_node_set(scene->root_node),
587 evas_3d_scene_camera_node_set(scene->camera_node) 565 evas_3d_scene_camera_node_set(scene->camera_node)
588 ); 566 );
589} 567}
@@ -685,28 +663,29 @@ void Evas_3D_Demo_add(globals *ourGlobals)
685 ourGlobals->scene = &ourScene; 663 ourGlobals->scene = &ourScene;
686 _scene_setup(ourGlobals, &ourScene); 664 _scene_setup(ourGlobals, &ourScene);
687 665
688 // Add an image object for 3D scene rendering. 666 // Add an image object for 3D scene rendering.
689 obj = eo_add(ELM_OBJ_IMAGE_CLASS, ourGlobals->win); 667 obj = eo_add(ELM_OBJ_IMAGE_CLASS, ourGlobals->win,
690 ourScene.image = obj; 668 evas_obj_size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND),
691 eo_do(obj, 669 elm_obj_image_fill_outside_set(EINA_TRUE),
692 evas_obj_size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND), 670 evas_obj_visibility_set(EINA_TRUE),
693 elm_obj_image_fill_outside_set(EINA_TRUE), 671 temp = elm_obj_image_object_get()
694 evas_obj_visibility_set(EINA_TRUE), 672 );
695 temp = elm_obj_image_object_get() 673 ourScene.image = obj;
696 ); 674
697 eo_do(temp, 675 eo_do(temp,
698 evas_obj_image_scene_set(ourScene.scene) 676 evas_obj_image_scene_set(ourScene.scene)
699 ); 677 );
700 elm_object_tooltip_text_set(obj, ""); 678 elm_object_tooltip_text_set(obj, "");
701 elm_object_tooltip_hide(obj); 679 elm_object_tooltip_hide(obj);
702 // Elm can't seem to be able to tell us WHERE an image was clicked, so use raw Evas calbacks instead. 680 // Elm can't seem to be able to tell us WHERE an image was clicked, so use raw Evas calbacks instead.
703 evas_object_event_callback_add(temp, EVAS_CALLBACK_MOUSE_MOVE, _on_mouse_move, &ourScene); 681 evas_object_event_callback_add(temp, EVAS_CALLBACK_MOUSE_MOVE, _on_mouse_move, &ourScene);
704 evas_object_event_callback_add(temp, EVAS_CALLBACK_MOUSE_DOWN, _on_mouse_down, &ourScene); 682 evas_object_event_callback_add(temp, EVAS_CALLBACK_MOUSE_DOWN, _on_mouse_down, &ourScene);
705 cameraAdd(ourGlobals, obj); 683
706 elm_win_resize_object_add(ourGlobals->win, obj); 684 cameraAdd(ourGlobals, obj);
707// elm_box_pack_end(ourGlobals->gld.bx, obj); 685 elm_win_resize_object_add(ourGlobals->win, obj);
708 686// elm_box_pack_end(ourGlobals->gld.bx, obj);
709 ourGlobals->gld.move = calloc(1, sizeof(cameraMove)); 687
688 ourGlobals->gld.move = calloc(1, sizeof(cameraMove));
710} 689}
711 690
712void Evas_3D_Demo_fini(globals *ourGlobals) 691void Evas_3D_Demo_fini(globals *ourGlobals)