Commit: e05f719b8bc11457b4555bdd8bddf8fe6858ef9d
Author: Campbell Barton
Date:   Fri Apr 17 17:31:56 2015 +1000
Branches: master
https://developer.blender.org/rBe05f719b8bc11457b4555bdd8bddf8fe6858ef9d

Dyntopo: avoid redundant lookup on original data

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

M       source/blender/bmesh/intern/bmesh_log.c
M       source/blender/bmesh/intern/bmesh_log.h
M       source/blender/editors/sculpt_paint/sculpt.c

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

diff --git a/source/blender/bmesh/intern/bmesh_log.c 
b/source/blender/bmesh/intern/bmesh_log.c
index d2397fa..abc502d 100644
--- a/source/blender/bmesh/intern/bmesh_log.c
+++ b/source/blender/bmesh/intern/bmesh_log.c
@@ -1086,6 +1086,24 @@ float BM_log_original_mask(BMLog *log, BMVert *v)
        return lv->mask;
 }
 
+void BM_log_original_vert_data(
+        BMLog *log, BMVert *v,
+        const float **r_co, const short **r_no)
+{
+       BMLogEntry *entry = log->current_entry;
+       const BMLogVert *lv;
+       unsigned v_id = bm_log_vert_id_get(log, v);
+       void *key = SET_UINT_IN_POINTER(v_id);
+
+       BLI_assert(entry);
+
+       BLI_assert(BLI_ghash_haskey(entry->modified_verts, key));
+
+       lv = BLI_ghash_lookup(entry->modified_verts, key);
+       *r_co = lv->co;
+       *r_no = lv->no;
+}
+
 /************************ Debugging and Testing ***********************/
 
 /* For internal use only (unit testing) */
diff --git a/source/blender/bmesh/intern/bmesh_log.h 
b/source/blender/bmesh/intern/bmesh_log.h
index 2147b5c..dd1772a 100644
--- a/source/blender/bmesh/intern/bmesh_log.h
+++ b/source/blender/bmesh/intern/bmesh_log.h
@@ -96,6 +96,11 @@ const short *BM_log_original_vert_no(BMLog *log, BMVert *v);
 /* Get the logged mask of a vertex */
 float BM_log_original_mask(BMLog *log, BMVert *v);
 
+/* Get the logged data of a vertex (avoid multiple lookups) */
+void BM_log_original_vert_data(
+        BMLog *log, BMVert *v,
+        const float **r_co, const short **r_no);
+
 /* For internal use only (unit testing) */
 BMLogEntry *BM_log_current_entry(BMLog *log);
 struct RangeTreeUInt *BM_log_unused_ids(BMLog *log);
diff --git a/source/blender/editors/sculpt_paint/sculpt.c 
b/source/blender/editors/sculpt_paint/sculpt.c
index 165de4c..2c76b3d 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -285,26 +285,22 @@ static void 
sculpt_orig_vert_data_update(SculptOrigVertData *orig_data,
                                          PBVHVertexIter *iter)
 {
        if (orig_data->unode->type == SCULPT_UNDO_COORDS) {
-               if (orig_data->coords) {
-                       orig_data->co = orig_data->coords[iter->i];
+               if (orig_data->bm_log) {
+                       BM_log_original_vert_data(
+                               orig_data->bm_log, iter->bm_vert,
+                               &orig_data->co, &orig_data->no);
                }
                else {
-                       orig_data->co = 
BM_log_original_vert_co(orig_data->bm_log, iter->bm_vert);
-               }
-
-               if (orig_data->normals) {
+                       orig_data->co = orig_data->coords[iter->i];
                        orig_data->no = orig_data->normals[iter->i];
                }
-               else {
-                       orig_data->no = 
BM_log_original_vert_no(orig_data->bm_log, iter->bm_vert);
-               }
        }
        else if (orig_data->unode->type == SCULPT_UNDO_MASK) {
-               if (orig_data->vmasks) {
-                       orig_data->mask = orig_data->vmasks[iter->i];
+               if (orig_data->bm_log) {
+                       orig_data->mask = 
BM_log_original_mask(orig_data->bm_log, iter->bm_vert);
                }
                else {
-                       orig_data->mask = 
BM_log_original_mask(orig_data->bm_log, iter->bm_vert);
+                       orig_data->mask = orig_data->vmasks[iter->i];
                }
        }
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to