Fix #146466: Sculpt undo applies evaluated positions incorrectly

Undo compression stored evaluated mesh positions instead of base mesh
positions when deform modifiers were active.
**Solution** : Modified `compress_fn` to compress `orig_position` data
when available (deform modifiers active), falling back to regular
position data otherwise.

Pull Request: https://projects.blender.org/blender/blender/pulls/146498
This commit is contained in:
Namit Bhutani
2025-09-23 10:55:15 +02:00
committed by Sean Kim
parent f2126e211f
commit 357bfc3cff

View File

@@ -421,7 +421,9 @@ struct PositionUndoStorage : NonMovable {
CompressLocalData &local_data = all_tls.local();
for (const int i : range) {
const Span<int> indices = data->multires_undo ? nodes[i]->grids : nodes[i]->vert_indices;
const Span<float3> positions = nodes[i]->position;
const Span<float3> positions = !nodes[i]->orig_position.is_empty() ?
nodes[i]->orig_position :
nodes[i]->position;
compression::filter_compress(indices, local_data.filtered, local_data.compressed);
new (&compressed_indices[i]) Array<std::byte>(local_data.compressed.as_span());
compression::filter_compress(positions, local_data.filtered, local_data.compressed);