Accel* BVH4::BVH4Triangle4vObjectSplit(TriangleMesh* mesh) { BVH4* accel = new BVH4(Triangle4v::type,mesh->parent,LeafMode); Builder* builder = BVH4Triangle4vMeshBuilderSAH(accel,mesh,LeafMode); Accel::Intersectors intersectors = BVH4Triangle4vIntersectorsHybrid(accel); return new AccelInstance(accel,builder,intersectors); }
void createTriangleMeshTriangle4v(TriangleMesh* mesh, AccelData*& accel, Builder*& builder) { if (mesh->numTimeSteps != 1) THROW_RUNTIME_ERROR("internal error"); accel = new BVH4(Triangle4v::type,mesh->parent,LeafMode); switch (mesh->flags) { case RTC_GEOMETRY_STATIC: builder = BVH4Triangle4vMeshBuilderSAH(accel,mesh,LeafMode); break; case RTC_GEOMETRY_DEFORMABLE: builder = BVH4Triangle4vMeshRefitSAH(accel,mesh,LeafMode); break; case RTC_GEOMETRY_DYNAMIC: builder = BVH4Triangle4vMeshBuilderMortonGeneral(accel,mesh,LeafMode); break; default: THROW_RUNTIME_ERROR("internal error"); } }
Builder* BVH4Triangle4vMeshRefitSAH (void* accel, TriangleMesh* mesh, size_t mode) { return new BVHNRefitT<4,TriangleMesh,Triangle4v>((BVH4*)accel,BVH4Triangle4vMeshBuilderSAH(accel,mesh,mode),mesh,mode); }