/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation * * SPDX-License-Identifier: Apache-2.0 */ #ifdef WITH_OPENVDB # include "util/openvdb.h" # include # include CCL_NAMESPACE_BEGIN /* Convert to the few data types we native can render. */ openvdb::GridBase::ConstPtr openvdb_convert_to_known_type(const openvdb::GridBase::ConstPtr &grid) { if (grid->isType()) { return grid; } if (grid->isType()) { return grid; } if (grid->isType()) { return grid; } if (grid->isType()) { const openvdb::FloatGrid floatgrid(*openvdb::gridConstPtrCast(grid)); return std::make_shared(std::move(floatgrid)); } if (grid->isType()) { const openvdb::FloatGrid floatgrid(*openvdb::gridConstPtrCast(grid)); return std::make_shared(std::move(floatgrid)); } if (grid->isType()) { const openvdb::FloatGrid floatgrid(*openvdb::gridConstPtrCast(grid)); return std::make_shared(std::move(floatgrid)); } if (grid->isType()) { const openvdb::FloatGrid floatgrid(*openvdb::gridConstPtrCast(grid)); return std::make_shared(std::move(floatgrid)); } if (grid->isType()) { const openvdb::Vec3fGrid floatgrid(*openvdb::gridConstPtrCast(grid)); return std::make_shared(std::move(floatgrid)); } if (grid->isType()) { const openvdb::Vec3fGrid floatgrid(*openvdb::gridConstPtrCast(grid)); return std::make_shared(std::move(floatgrid)); } return nullptr; } /* Counter number of channels. */ struct NumChannelsOp { int num_channels = 0; template bool operator()(const typename GridType::ConstPtr & /*unused*/) { num_channels = channels; return true; } }; int openvdb_num_channels(const openvdb::GridBase::ConstPtr &grid) { NumChannelsOp op; if (!openvdb_grid_type_operation(grid, op)) { return 0; } return op.num_channels; } /* Convert OpenVDB to NanoVDB. */ # ifdef WITH_NANOVDB # endif CCL_NAMESPACE_END #endif