Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2014-05-15 19:45:35 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2014-05-15 19:45:35 +0400
commitad87d47fdb7f394219848ea66d55ce71c616821f (patch)
treeb59a3628e26c8023aeed3edf0423d73b0dead770 /source/blender/blenkernel/intern/paint.c
parent3889483b1fa23911e58cff4d7d195d16e83760b0 (diff)
Fix T39978: Sculpting shapekeys - Using Smooth tool, turns shapekey into Basis.
Smooth brush requires deformed coordinates array to present.
Diffstat (limited to 'source/blender/blenkernel/intern/paint.c')
-rw-r--r--source/blender/blenkernel/intern/paint.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 1b8c4e084cf..24616d88852 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -658,14 +658,28 @@ void BKE_sculpt_update_mesh_elements(Scene *scene, Sculpt *sd, Object *ob,
BKE_free_sculptsession_deformMats(ss);
}
- /* if pbvh is deformed, key block is already applied to it */
- if (ss->kb && !BKE_pbvh_isDeformed(ss->pbvh)) {
- float (*vertCos)[3] = BKE_key_convert_to_vertcos(ob, ss->kb);
+ if (ss->kb != NULL && ss->deform_cos == NULL) {
+ ss->deform_cos = BKE_key_convert_to_vertcos(ob, ss->kb);
+ }
- if (vertCos) {
- /* apply shape keys coordinates to PBVH */
- BKE_pbvh_apply_vertCos(ss->pbvh, vertCos);
- MEM_freeN(vertCos);
+ /* if pbvh is deformed, key block is already applied to it */
+ if (ss->kb) {
+ bool pbvh_deformd = BKE_pbvh_isDeformed(ss->pbvh);
+ if (!pbvh_deformd || ss->deform_cos == NULL) {
+ float (*vertCos)[3] = BKE_key_convert_to_vertcos(ob, ss->kb);
+
+ if (vertCos) {
+ if (!pbvh_deformd) {
+ /* apply shape keys coordinates to PBVH */
+ BKE_pbvh_apply_vertCos(ss->pbvh, vertCos);
+ }
+ if (ss->deform_cos == NULL) {
+ ss->deform_cos = vertCos;
+ }
+ if (vertCos != ss->deform_cos) {
+ MEM_freeN(vertCos);
+ }
+ }
}
}
}