| 79 | } |
| 80 | |
| 81 | PrimInfo createPrimRefArrayMBlur(Scene* scene, Geometry::GTypeMask types, const size_t numPrimRefs, mvector<PrimRef>& prims, BuildProgressMonitor& progressMonitor, size_t itime) |
| 82 | { |
| 83 | ParallelForForPrefixSumState<PrimInfo> pstate; |
| 84 | Scene::Iterator2 iter(scene,types,true); |
| 85 | |
| 86 | /* first try */ |
| 87 | progressMonitor(0); |
| 88 | pstate.init(iter,size_t(1024)); |
| 89 | PrimInfo pinfo = parallel_for_for_prefix_sum0( pstate, iter, PrimInfo(empty), [&](Geometry* mesh, const range<size_t>& r, size_t k, size_t geomID) -> PrimInfo { |
| 90 | return mesh->createPrimRefArrayMB(prims,itime,r,k,(unsigned)geomID); |
| 91 | }, [](const PrimInfo& a, const PrimInfo& b) -> PrimInfo { return PrimInfo::merge(a,b); }); |
| 92 | |
| 93 | /* if we need to filter out geometry, run again */ |
| 94 | if (pinfo.size() != numPrimRefs) |
| 95 | { |
| 96 | progressMonitor(0); |
| 97 | pinfo = parallel_for_for_prefix_sum1( pstate, iter, PrimInfo(empty), [&](Geometry* mesh, const range<size_t>& r, size_t k, size_t geomID, const PrimInfo& base) -> PrimInfo { |
| 98 | return mesh->createPrimRefArrayMB(prims,itime,r,base.size(),(unsigned)geomID); |
| 99 | }, [](const PrimInfo& a, const PrimInfo& b) -> PrimInfo { return PrimInfo::merge(a,b); }); |
| 100 | } |
| 101 | return pinfo; |
| 102 | } |
| 103 | |
| 104 | PrimInfoMB createPrimRefArrayMSMBlur(Scene* scene, Geometry::GTypeMask types, const size_t numPrimRefs, mvector<PrimRefMB>& prims, BuildProgressMonitor& progressMonitor, BBox1f t0t1) |
| 105 | { |
no test coverage detected