[Bf-blender-cvs] [e2006f15a94] master: Fix T103618: GN Transform modifies source VDB grid
Erik Abrahamsson
noreply at git.blender.org
Sun Jan 22 23:34:16 CET 2023
Commit: e2006f15a94253dadeef487f552f84ad950727e9
Author: Erik Abrahamsson
Date: Sun Jan 22 23:32:19 2023 +0100
Branches: master
https://developer.blender.org/rBe2006f15a94253dadeef487f552f84ad950727e9
Fix T103618: GN Transform modifies source VDB grid
The call to BKE_volume_grid_openvdb_for_write() was accidentally removed
in D15806. This adds it to BKE_volume_grid_transform_matrix_set() to
avoid that it happens again when that function is used.
Differential Revision: D16949
===================================================================
M source/blender/blenkernel/BKE_volume.h
M source/blender/blenkernel/intern/volume.cc
M source/blender/nodes/geometry/nodes/node_geo_transform_geometry.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_volume.h b/source/blender/blenkernel/BKE_volume.h
index 00b5993c5eb..d300d08da91 100644
--- a/source/blender/blenkernel/BKE_volume.h
+++ b/source/blender/blenkernel/BKE_volume.h
@@ -114,7 +114,9 @@ int BKE_volume_grid_channels(const struct VolumeGrid *grid);
* Transformation from index space to object space.
*/
void BKE_volume_grid_transform_matrix(const struct VolumeGrid *grid, float mat[4][4]);
-void BKE_volume_grid_transform_matrix_set(struct VolumeGrid *volume_grid, const float mat[4][4]);
+void BKE_volume_grid_transform_matrix_set(const struct Volume *volume,
+ struct VolumeGrid *volume_grid,
+ const float mat[4][4]);
/* Volume Editing
*
diff --git a/source/blender/blenkernel/intern/volume.cc b/source/blender/blenkernel/intern/volume.cc
index 050ba18db9a..0d8d66d69a9 100644
--- a/source/blender/blenkernel/intern/volume.cc
+++ b/source/blender/blenkernel/intern/volume.cc
@@ -1474,7 +1474,9 @@ void BKE_volume_grid_transform_matrix(const VolumeGrid *volume_grid, float mat[4
#endif
}
-void BKE_volume_grid_transform_matrix_set(struct VolumeGrid *volume_grid, const float mat[4][4])
+void BKE_volume_grid_transform_matrix_set(const Volume *volume,
+ VolumeGrid *volume_grid,
+ const float mat[4][4])
{
#ifdef WITH_OPENVDB
openvdb::math::Mat4f mat_openvdb;
@@ -1483,7 +1485,7 @@ void BKE_volume_grid_transform_matrix_set(struct VolumeGrid *volume_grid, const
mat_openvdb(col, row) = mat[col][row];
}
}
- openvdb::GridBase::Ptr grid = volume_grid->grid();
+ openvdb::GridBase::Ptr grid = BKE_volume_grid_openvdb_for_write(volume, volume_grid, false);
grid->setTransform(std::make_shared<openvdb::math::Transform>(
std::make_shared<openvdb::math::AffineMap>(mat_openvdb)));
#else
diff --git a/source/blender/nodes/geometry/nodes/node_geo_transform_geometry.cc b/source/blender/nodes/geometry/nodes/node_geo_transform_geometry.cc
index 281ffc768ef..123b02daf02 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_transform_geometry.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_transform_geometry.cc
@@ -142,7 +142,7 @@ static void transform_volume(GeoNodeExecParams ¶ms,
normalize_v3(grid_matrix.values[2]);
}
}
- BKE_volume_grid_transform_matrix_set(volume_grid, grid_matrix.values);
+ BKE_volume_grid_transform_matrix_set(&volume, volume_grid, grid_matrix.values);
}
if (found_too_small_scale) {
params.error_message_add(NodeWarningType::Warning,
More information about the Bf-blender-cvs
mailing list