From e2006f15a94253dadeef487f552f84ad950727e9 Mon Sep 17 00:00:00 2001 From: Erik Abrahamsson Date: Sun, 22 Jan 2023 23:32:19 +0100 Subject: [PATCH] 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 --- source/blender/blenkernel/BKE_volume.h | 4 +++- source/blender/blenkernel/intern/volume.cc | 6 ++++-- .../nodes/geometry/nodes/node_geo_transform_geometry.cc | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) 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( std::make_shared(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,