Blender V5.0
openvdb.cpp
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#ifdef WITH_OPENVDB
6
7# include "util/openvdb.h"
8
9# include <openvdb/tools/Activate.h>
10# include <openvdb/tools/Dense.h>
11
13
14/* Convert to the few data types we native can render. */
15openvdb::GridBase::ConstPtr openvdb_convert_to_known_type(const openvdb::GridBase::ConstPtr &grid)
16{
17 if (grid->isType<openvdb::FloatGrid>()) {
18 return grid;
19 }
20 if (grid->isType<openvdb::Vec3fGrid>()) {
21 return grid;
22 }
23 if (grid->isType<openvdb::Vec4fGrid>()) {
24 return grid;
25 }
26 if (grid->isType<openvdb::BoolGrid>()) {
27 const openvdb::FloatGrid floatgrid(*openvdb::gridConstPtrCast<openvdb::BoolGrid>(grid));
28 return std::make_shared<openvdb::FloatGrid>(std::move(floatgrid));
29 }
30 if (grid->isType<openvdb::DoubleGrid>()) {
31 const openvdb::FloatGrid floatgrid(*openvdb::gridConstPtrCast<openvdb::DoubleGrid>(grid));
32 return std::make_shared<openvdb::FloatGrid>(std::move(floatgrid));
33 }
34 if (grid->isType<openvdb::Int32Grid>()) {
35 const openvdb::FloatGrid floatgrid(*openvdb::gridConstPtrCast<openvdb::Int32Grid>(grid));
36 return std::make_shared<openvdb::FloatGrid>(std::move(floatgrid));
37 }
38 if (grid->isType<openvdb::Int64Grid>()) {
39 const openvdb::FloatGrid floatgrid(*openvdb::gridConstPtrCast<openvdb::Int64Grid>(grid));
40 return std::make_shared<openvdb::FloatGrid>(std::move(floatgrid));
41 }
42 if (grid->isType<openvdb::Vec3IGrid>()) {
43 const openvdb::Vec3fGrid floatgrid(*openvdb::gridConstPtrCast<openvdb::Vec3IGrid>(grid));
44 return std::make_shared<openvdb::Vec3fGrid>(std::move(floatgrid));
45 }
46 if (grid->isType<openvdb::Vec3dGrid>()) {
47 const openvdb::Vec3fGrid floatgrid(*openvdb::gridConstPtrCast<openvdb::Vec3dGrid>(grid));
48 return std::make_shared<openvdb::Vec3fGrid>(std::move(floatgrid));
49 }
50 return nullptr;
51}
52
53/* Counter number of channels. */
54struct NumChannelsOp {
55 int num_channels = 0;
56
57 template<typename GridType, typename FloatDataType, const int channels>
58 bool operator()(const typename GridType::ConstPtr & /*unused*/)
59 {
60 num_channels = channels;
61 return true;
62 }
63};
64
65int openvdb_num_channels(const openvdb::GridBase::ConstPtr &grid)
66{
67 NumChannelsOp op;
68 if (!openvdb_grid_type_operation(grid, op)) {
69 return 0;
70 }
71 return op.num_channels;
72}
73
74/* Convert OpenVDB to NanoVDB. */
75# ifdef WITH_NANOVDB
76# endif
77
79
80#endif
SIMD_FORCE_INLINE btVector3 operator()(const btVector3 &x) const
Return the transform of the vector.
Definition btTransform.h:90
#define CCL_NAMESPACE_END