RTCScene convertScene(ISPCScene* scene_in) { for (size_t i=0; i<scene_in->numGeometries; i++) { ISPCGeometry* geometry = scene_in->geometries[i]; if (geometry->type == SUBDIV_MESH) { g_subdiv_mode = true; break; } } int scene_flags = RTC_SCENE_STATIC | RTC_SCENE_INCOHERENT; int scene_aflags = RTC_INTERSECT1 | RTC_INTERPOLATE; if (g_subdiv_mode) scene_flags = RTC_SCENE_DYNAMIC | RTC_SCENE_INCOHERENT | RTC_SCENE_ROBUST; RTCScene scene_out = ConvertScene(g_device, g_ispc_scene,(RTCSceneFlags)scene_flags, (RTCAlgorithmFlags) scene_aflags, RTC_GEOMETRY_STATIC); /* commit individual objects in case of instancing */ if (g_instancing_mode == ISPC_INSTANCING_SCENE_GEOMETRY || g_instancing_mode == ISPC_INSTANCING_SCENE_GROUP) { for (unsigned int i=0; i<scene_in->numGeometries; i++) { if (scene_in->geomID_to_scene[i]) rtcCommit(scene_in->geomID_to_scene[i]); } } /* commit changes to scene */ return scene_out; }
RTCScene convertScene(ISPCScene* scene_in) { for (unsigned int i=0; i<scene_in->numGeometries; i++) { ISPCGeometry* geometry = scene_in->geometries[i]; if (geometry->type == SUBDIV_MESH) { g_subdiv_mode = true; break; } } RTCScene scene_out = ConvertScene(g_device, g_ispc_scene, RTC_BUILD_QUALITY_MEDIUM); rtcSetSceneProgressMonitorFunction(scene_out,monitorProgressFunction,nullptr); /* commit individual objects in case of instancing */ if (g_instancing_mode != ISPC_INSTANCING_NONE) { for (unsigned int i=0; i<scene_in->numGeometries; i++) { ISPCGeometry* geometry = g_ispc_scene->geometries[i]; if (geometry->type == GROUP) rtcCommitScene(geometry->scene); } } /* commit changes to scene */ return scene_out; }