MCPcopy Create free account
hub / github.com/RenderKit/embree / createPrimRefArrayGrids

Function createPrimRefArrayGrids

kernels/builders/primrefgen.cpp:237–274  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

235
236#if defined(EMBREE_GEOMETRY_GRID)
237 PrimInfo createPrimRefArrayGrids(Scene* scene, mvector<PrimRef>& prims, mvector<SubGridBuildData>& sgrids)
238 {
239 PrimInfo pinfo(empty);
240 size_t numPrimitives = 0;
241
242 /* first run to get #primitives */
243
244 ParallelForForPrefixSumState<PrimInfo> pstate;
245 Scene::Iterator<GridMesh,false> iter(scene);
246
247 pstate.init(iter,size_t(1024));
248
249 /* iterate over all meshes in the scene */
250 pinfo = parallel_for_for_prefix_sum0( pstate, iter, PrimInfo(empty), [&](GridMesh* mesh, const range<size_t>& r, size_t k, size_t geomID) -> PrimInfo {
251 PrimInfo pinfo(empty);
252 for (size_t j=r.begin(); j<r.end(); j++)
253 {
254 if (!mesh->valid(j)) continue;
255 BBox3fa bounds = empty;
256 const PrimRef prim(bounds,(unsigned)geomID,(unsigned)j);
257 if (!mesh->valid(j)) continue;
258 pinfo.add_center2(prim,mesh->getNumSubGrids(j));
259 }
260 return pinfo;
261 }, [](const PrimInfo& a, const PrimInfo& b) -> PrimInfo { return PrimInfo::merge(a,b); });
262 numPrimitives = pinfo.size();
263
264 /* resize arrays */
265 sgrids.resize(numPrimitives);
266 prims.resize(numPrimitives);
267
268 /* second run to fill primrefs and SubGridBuildData arrays */
269 pinfo = parallel_for_for_prefix_sum1( pstate, iter, PrimInfo(empty), [&](GridMesh* mesh, const range<size_t>& r, size_t k, size_t geomID, const PrimInfo& base) -> PrimInfo {
270 return mesh->createPrimRefArray(prims,sgrids,r,base.size(),geomID);
271 }, [](const PrimInfo& a, const PrimInfo& b) -> PrimInfo { return PrimInfo::merge(a,b); });
272 assert(pinfo.size() == numPrimitives);
273 return pinfo;
274 }
275
276 PrimInfo createPrimRefArrayGrids(GridMesh* mesh, mvector<PrimRef>& prims, mvector<SubGridBuildData>& sgrids)
277 {

Callers 1

buildMethod · 0.85

Calls 14

parallel_prefix_sumFunction · 0.85
add_center2Method · 0.80
getNumSubGridsMethod · 0.80
mergeFunction · 0.70
maxFunction · 0.50
initMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
validMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected