0

I have sparse openvdb grid and want to iterate over active CoordBBox in parallel, as far as it can change tree topology I cannot use openvdb::tools::foreach

I come up with this solution, but maybe there are something better:

auto activeBox = grid->evalActiveVoxelBoundingBox();
// make dense topology tree to copy its nodes topology to original grid
std::unique_ptr<openvdb::TopologyTree> topologyTree = std::make_unique<openvdb::TopologyTree>();
// make it dense
topologyTree->denseFill( activeBox, {} );
grid->tree().topologyUnion( *topologyTree ); // after this all voxels should be active and trivial parallelism is ok
// free topology tree
topologyTree.reset();

tbb::parallel_for( tbb::blocked_range<int>( 0, int( activeBox.volume() ) ),
    [&] ( const tbb::blocked_range<int>& range )
{
    auto accessor = grid->getAccessor();
    for ( auto i = range.begin(); i < range.end(); ++i )
    {
        // do something
    }
} );
AlekhyaV - Intel
  • 580
  • 3
  • 21

0 Answers0