Files
test/intern/cycles/util/openvdb.cpp
Brecht Van Lommel 8111152c67 Refactor: Cycles: Add some OpenVDB and NanoVDB functions to util
OpenVDB to NanoVDB was moved, a new NanoVDB to OpenVDB mask grid was
added for future use. Some redundant CMake code was simplified.

Pull Request: https://projects.blender.org/blender/blender/pulls/132908
2025-07-09 20:59:27 +02:00

81 lines
2.4 KiB
C++

/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
*
* SPDX-License-Identifier: Apache-2.0 */
#ifdef WITH_OPENVDB
# include "util/openvdb.h"
# include <openvdb/tools/Activate.h>
# include <openvdb/tools/Dense.h>
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<openvdb::FloatGrid>()) {
return grid;
}
if (grid->isType<openvdb::Vec3fGrid>()) {
return grid;
}
if (grid->isType<openvdb::Vec4fGrid>()) {
return grid;
}
if (grid->isType<openvdb::BoolGrid>()) {
const openvdb::FloatGrid floatgrid(*openvdb::gridConstPtrCast<openvdb::BoolGrid>(grid));
return std::make_shared<openvdb::FloatGrid>(std::move(floatgrid));
}
if (grid->isType<openvdb::DoubleGrid>()) {
const openvdb::FloatGrid floatgrid(*openvdb::gridConstPtrCast<openvdb::DoubleGrid>(grid));
return std::make_shared<openvdb::FloatGrid>(std::move(floatgrid));
}
if (grid->isType<openvdb::Int32Grid>()) {
const openvdb::FloatGrid floatgrid(*openvdb::gridConstPtrCast<openvdb::Int32Grid>(grid));
return std::make_shared<openvdb::FloatGrid>(std::move(floatgrid));
}
if (grid->isType<openvdb::Int64Grid>()) {
const openvdb::FloatGrid floatgrid(*openvdb::gridConstPtrCast<openvdb::Int64Grid>(grid));
return std::make_shared<openvdb::FloatGrid>(std::move(floatgrid));
}
if (grid->isType<openvdb::Vec3IGrid>()) {
const openvdb::Vec3fGrid floatgrid(*openvdb::gridConstPtrCast<openvdb::Vec3IGrid>(grid));
return std::make_shared<openvdb::Vec3fGrid>(std::move(floatgrid));
}
if (grid->isType<openvdb::Vec3dGrid>()) {
const openvdb::Vec3fGrid floatgrid(*openvdb::gridConstPtrCast<openvdb::Vec3dGrid>(grid));
return std::make_shared<openvdb::Vec3fGrid>(std::move(floatgrid));
}
return nullptr;
}
/* Counter number of channels. */
struct NumChannelsOp {
int num_channels = 0;
template<typename GridType, typename FloatDataType, const int channels>
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