Blender V4.3
openvdb.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#ifndef __UTIL_OPENVDB_H__
6#define __UTIL_OPENVDB_H__
7
8#ifdef WITH_OPENVDB
9# include <openvdb/openvdb.h>
10
11namespace openvdb {
12
13using Vec4fTree = tree::Tree4<Vec4f, 5, 4, 3>::Type;
14using Vec4fGrid = Grid<Vec4fTree>;
15
16/* Apply operation to known grid types. */
17template<typename OpType>
18bool grid_type_operation(const openvdb::GridBase::ConstPtr &grid, OpType &&op)
19{
20 if (grid->isType<openvdb::FloatGrid>()) {
21 return op.template operator()<openvdb::FloatGrid, openvdb::FloatGrid, float, 1>(grid);
22 }
23 else if (grid->isType<openvdb::Vec3fGrid>()) {
24 return op.template operator()<openvdb::Vec3fGrid, openvdb::Vec3fGrid, openvdb::Vec3f, 3>(grid);
25 }
26 else if (grid->isType<openvdb::BoolGrid>()) {
27 return op.template operator()<openvdb::BoolGrid, openvdb::FloatGrid, float, 1>(grid);
28 }
29 else if (grid->isType<openvdb::DoubleGrid>()) {
30 return op.template operator()<openvdb::DoubleGrid, openvdb::FloatGrid, float, 1>(grid);
31 }
32 else if (grid->isType<openvdb::Int32Grid>()) {
33 return op.template operator()<openvdb::Int32Grid, openvdb::FloatGrid, float, 1>(grid);
34 }
35 else if (grid->isType<openvdb::Int64Grid>()) {
36 return op.template operator()<openvdb::Int64Grid, openvdb::FloatGrid, float, 1>(grid);
37 }
38 else if (grid->isType<openvdb::Vec3IGrid>()) {
39 return op.template operator()<openvdb::Vec3IGrid, openvdb::Vec3fGrid, openvdb::Vec3f, 3>(grid);
40 }
41 else if (grid->isType<openvdb::Vec3dGrid>()) {
42 return op.template operator()<openvdb::Vec3dGrid, openvdb::Vec3fGrid, openvdb::Vec3f, 3>(grid);
43 }
44 else if (grid->isType<openvdb::MaskGrid>()) {
45 return op.template operator()<openvdb::MaskGrid, openvdb::FloatGrid, float, 1>(grid);
46 }
47 else {
48 return false;
49 }
50}
51
52}; // namespace openvdb
53
54#endif
55
56#endif /* __UTIL_OPENVDB_H__ */
draw_view in_light_buf[] float