[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 &params,
         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