VtArray<DstType> _ComputeSmoothNormals(int numPoints, SrcVec3Type const * pointsPtr, VtIntArray const &adjacencyTable, int numAdjPoints) { // to be safe. // numPoints of input pointer could be different from the number of points // in adjacency table. numPoints = std::min(numPoints, numAdjPoints); VtArray<DstType> normals(numPoints); _SmoothNormalsWorker<SrcVec3Type, DstType> workerState (pointsPtr, adjacencyTable, normals.data()); WorkParallelForN( numPoints, std::bind(&_SmoothNormalsWorker<SrcVec3Type, DstType>::Compute, std::ref(workerState), std::placeholders::_1, std::placeholders::_2)); return normals; }
VtArray<DstType> _ComputeSmoothNormals(int numPoints, SrcVec3Type const * pointsPtr, std::vector<int> const &entry, int numAdjPoints) { // to be safe. // numPoints of input pointer could be different from the number of points // in adjacency table. numPoints = std::min(numPoints, numAdjPoints); VtArray<DstType> normals(numPoints); _SmoothNormalsWorker<SrcVec3Type, DstType> workerState (pointsPtr, entry, normals.data()); WorkParallelForN( numPoints, boost::bind(&_SmoothNormalsWorker<SrcVec3Type, DstType>::Compute, workerState, _1, _2)); return normals; }