[Bf-blender-cvs] [bde215a60c1] master: Fix T68878: Update shapekeys during transformation

Germano Cavalcante noreply at git.blender.org
Wed Feb 19 12:54:44 CET 2020


Commit: bde215a60c16ce77a60ecb38eaf7802965d73c7f
Author: Germano Cavalcante
Date:   Wed Feb 19 08:54:34 2020 -0300
Branches: master
https://developer.blender.org/rBbde215a60c16ce77a60ecb38eaf7802965d73c7f

Fix T68878: Update shapekeys during transformation

Only use the hack in `key_block_get_data` for the bmesh shapekey.
The remaining shapekeys can use the original offset values.

Differential Revision: https://developer.blender.org/D6516

===================================================================

M	source/blender/blenkernel/intern/key.c

===================================================================

diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c
index 6bc494ae3ee..22c05b53780 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -820,7 +820,7 @@ static void key_evaluate_relative(const int start,
         KeyBlock *refb;
         float weight,
             *weights = per_keyblock_weights ? per_keyblock_weights[keyblock_index] : NULL;
-        char *freefrom = NULL, *freereffrom = NULL;
+        char *freefrom = NULL;
 
         /* reference now can be any block */
         refb = BLI_findlink(&key->block, kb->relative);
@@ -830,7 +830,10 @@ static void key_evaluate_relative(const int start,
 
         poin = basispoin;
         from = key_block_get_data(key, actkb, kb, &freefrom);
-        reffrom = key_block_get_data(key, actkb, refb, &freereffrom);
+
+        /* For meshes, use the original values instead of the bmesh values to
+         * maintain a constant offset. */
+        reffrom = refb->data;
 
         poin += start * poinsize;
         reffrom += key->elemsize * start;  // key elemsize yes!
@@ -876,9 +879,6 @@ static void key_evaluate_relative(const int start,
                 if (freefrom) {
                   MEM_freeN(freefrom);
                 }
-                if (freereffrom) {
-                  MEM_freeN(freereffrom);
-                }
                 BLI_assert(!"invalid 'cp[1]'");
                 return;
             }
@@ -900,9 +900,6 @@ static void key_evaluate_relative(const int start,
         if (freefrom) {
           MEM_freeN(freefrom);
         }
-        if (freereffrom) {
-          MEM_freeN(freereffrom);
-        }
       }
     }
   }



More information about the Bf-blender-cvs mailing list