| 478 | |
| 479 | /* called by the C++ code to render */ |
| 480 | extern "C" void device_render (int* pixels, |
| 481 | const unsigned int width, |
| 482 | const unsigned int height, |
| 483 | const float time, |
| 484 | const ISPCCamera& camera) |
| 485 | { |
| 486 | data.spp = g_spp; |
| 487 | if (g_animate) { |
| 488 | time_total += (time - time_last_frame); |
| 489 | } |
| 490 | time_last_frame = time; |
| 491 | |
| 492 | if (g_rebuild || g_trees_changed || g_animate) { |
| 493 | int64_t total_start = get_clock(); |
| 494 | |
| 495 | data.use_instance_array = g_use_instance_array; |
| 496 | unsigned int old_num_trees = num_trees; |
| 497 | if (g_complexity == 0) { num_trees_sqrt = 250; } |
| 498 | else if (g_complexity == 1) { num_trees_sqrt = 500; } |
| 499 | else if (g_complexity == 2) { num_trees_sqrt = 1000; } |
| 500 | else { num_trees_sqrt = 2000; } |
| 501 | |
| 502 | num_trees = num_trees_sqrt * num_trees_sqrt; |
| 503 | |
| 504 | if (g_rebuild) |
| 505 | { |
| 506 | int64_t start_cleanup = get_clock(); |
| 507 | if (data.g_scene) { |
| 508 | rtcReleaseScene(data.g_scene); |
| 509 | data.g_scene = nullptr; |
| 510 | } |
| 511 | int64_t start_objects = get_clock(); |
| 512 | g_cycles_cleanup = start_objects - start_cleanup; |
| 513 | for (int i = 0; i < 6; ++i) { |
| 514 | data.trees_selected[i] = g_trees[i]; |
| 515 | scene_trees_selected[i] = scene_trees[g_trees[i]]; |
| 516 | } |
| 517 | rebuild_trees(old_num_trees, time_total); |
| 518 | int64_t start_embree_objects = get_clock(); |
| 519 | g_cycles_objects = start_embree_objects - start_objects; |
| 520 | g_scene = data.g_scene = rtcNewScene(g_device); |
| 521 | if (g_animate) |
| 522 | rtcSetSceneFlags(data.g_scene,RTC_SCENE_FLAG_DYNAMIC); |
| 523 | if (g_build_quality == 0) rtcSetSceneBuildQuality(data.g_scene, RTC_BUILD_QUALITY_LOW); |
| 524 | else if (g_build_quality == 1) rtcSetSceneBuildQuality(data.g_scene, RTC_BUILD_QUALITY_MEDIUM); |
| 525 | else rtcSetSceneBuildQuality(data.g_scene, RTC_BUILD_QUALITY_HIGH); |
| 526 | addTerrain(data.g_scene); |
| 527 | rebuild_instances(old_num_trees); |
| 528 | int64_t start_embree_bvh_build = get_clock(); |
| 529 | g_cycles_embree_objects = start_embree_bvh_build - start_embree_objects; |
| 530 | rtcCommitScene(data.g_scene); |
| 531 | data.g_traversable = rtcGetSceneTraversable(data.g_scene); |
| 532 | g_cycles_embree_bvh_build = get_clock() - start_embree_bvh_build; |
| 533 | g_rebuild = false; |
| 534 | } |
| 535 | else if (g_trees_changed) |
| 536 | { |
| 537 | g_cycles_cleanup = 0; |
nothing calls this directly
no test coverage detected