Blender V5.0
BKE_volume_grid_fields.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2025 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
7#include "FN_field.hh"
8
10
11#ifdef WITH_OPENVDB
12
13# include "openvdb_fwd.hh"
14
15namespace blender::bke {
16
21class VoxelFieldContext : public fn::FieldContext {
22 private:
23 const openvdb::math::Transform &transform_;
24 Span<openvdb::Coord> voxels_;
25
26 public:
27 VoxelFieldContext(const openvdb::math::Transform &transform, Span<openvdb::Coord> voxels);
28
29 GVArray get_varray_for_input(const fn::FieldInput &field_input,
30 const IndexMask &mask,
31 ResourceScope &scope) const override;
32
33 Span<openvdb::Coord> voxels() const
34 {
35 return voxels_;
36 }
37};
38
43class TilesFieldContext : public fn::FieldContext {
44 private:
45 const openvdb::math::Transform &transform_;
46 Span<openvdb::CoordBBox> tiles_;
47
48 public:
49 TilesFieldContext(const openvdb::math::Transform &transform,
50 const Span<openvdb::CoordBBox> tiles);
51
52 GVArray get_varray_for_input(const fn::FieldInput &field_input,
53 const IndexMask &mask,
54 ResourceScope &scope) const override;
55
56 Span<openvdb::CoordBBox> tiles() const
57 {
58 return tiles_;
59 }
60};
61
62class VoxelCoordinateFieldInput : public fn::FieldInput {
63 private:
64 math::Axis axis_;
65
66 public:
67 VoxelCoordinateFieldInput(math::Axis axis);
68
69 GVArray get_varray_for_context(const fn::FieldContext &context,
70 const IndexMask &mask,
71 ResourceScope &scope) const override;
72};
73
74class VoxelExtentFieldInput : public fn::FieldInput {
75 private:
76 math::Axis axis_;
77
78 public:
79 VoxelExtentFieldInput(math::Axis axis);
80
81 GVArray get_varray_for_context(const fn::FieldContext &context,
82 const IndexMask &mask,
83 ResourceScope &scope) const override;
84};
85
86class IsTileFieldInput : public fn::FieldInput {
87 public:
88 IsTileFieldInput();
89
90 GVArray get_varray_for_context(const fn::FieldContext &context,
91 const IndexMask &mask,
92 ResourceScope &scope) const override;
93};
94
95} // namespace blender::bke
96
97#endif
SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
ccl_gpu_kernel_postfix ccl_global KernelWorkTile * tiles
ccl_device_inline float2 mask(const MaskType mask, const float2 a)