[Bf-blender-cvs] [afab7bca172] greasepencil-refactor: GPencil: Optimize update pointer origin

Antonio Vazquez noreply at git.blender.org
Sun Feb 2 23:36:49 CET 2020


Commit: afab7bca172d348469ce9dec3d66659ac301dbcf
Author: Antonio Vazquez
Date:   Sun Feb 2 23:31:02 2020 +0100
Branches: greasepencil-refactor
https://developer.blender.org/rBafab7bca172d348469ce9dec3d66659ac301dbcf

GPencil: Optimize update pointer origin

The Link now is calculated using index not using BLI function.

This speedup a lot the function.

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

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

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

diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index a9675121a67..4aae1525d81 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -3802,23 +3802,21 @@ void BKE_gpencil_visible_stroke_iter(
 void BKE_gpencil_frame_original_pointers_update(const struct bGPDframe *gpf_orig,
                                                 const struct bGPDframe *gpf_eval)
 {
-  int stroke_idx = -1;
+  bGPDstroke *gps_eval = gpf_eval->strokes.first;
   LISTBASE_FOREACH (bGPDstroke *, gps_orig, &gpf_orig->strokes) {
-    stroke_idx++;
 
     /* Assign original stroke pointer. */
-    if (gpf_eval != NULL) {
-      bGPDstroke *gps_eval = BLI_findlink(&gpf_eval->strokes, stroke_idx);
-      if (gps_eval != NULL) {
-        gps_eval->runtime.gps_orig = gps_orig;
-
-        /* Assign original point pointer. */
-        for (int i = 0; i < gps_orig->totpoints; i++) {
-          bGPDspoint *pt_eval = &gps_eval->points[i];
-          pt_eval->runtime.pt_orig = &gps_orig->points[i];
-          pt_eval->runtime.idx_orig = i;
-        }
+    if (gps_eval != NULL) {
+      gps_eval->runtime.gps_orig = gps_orig;
+
+      /* Assign original point pointer. */
+      for (int i = 0; i < gps_orig->totpoints; i++) {
+        bGPDspoint *pt_eval = &gps_eval->points[i];
+        pt_eval->runtime.pt_orig = &gps_orig->points[i];
+        pt_eval->runtime.idx_orig = i;
       }
+      /* Increase pointer. */
+      gps_eval = gps_eval->next;
     }
   }
 }
@@ -3833,29 +3831,22 @@ void BKE_gpencil_update_orig_pointers(const Object *ob_orig, const Object *ob_ev
    * so we can assume the layer index is the same in both datablocks.
    * This data will be used by operators. */
 
-  int layer_idx = -1;
+  bGPDlayer *gpl_eval = gpd_eval->layers.first;
   LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd_orig->layers) {
-    layer_idx++;
-    /* Retry evaluated layer. */
-    bGPDlayer *gpl_eval = BLI_findlink(&gpd_eval->layers, layer_idx);
-    if (gpl_eval == NULL) {
-      continue;
-    }
-    /* Update layer reference pointers. */
-    gpl_eval->runtime.gpl_orig = (bGPDlayer *)gpl;
-
-    int frame_idx = -1;
-    LISTBASE_FOREACH (bGPDframe *, gpf_orig, &gpl->frames) {
-      frame_idx++;
-      /* Retry evaluated frame. */
-      bGPDframe *gpf_eval = BLI_findlink(&gpl_eval->frames, frame_idx);
-      if (gpf_eval == NULL) {
-        continue;
+    if (gpl_eval != NULL) {
+      /* Update layer reference pointers. */
+      gpl_eval->runtime.gpl_orig = (bGPDlayer *)gpl;
+
+      bGPDframe *gpf_eval = gpl_eval->frames.first;
+      LISTBASE_FOREACH (bGPDframe *, gpf_orig, &gpl->frames) {
+        if (gpf_eval != NULL) {
+          /* Update frame reference pointers. */
+          gpf_eval->runtime.gpf_orig = (bGPDframe *)gpf_orig;
+          BKE_gpencil_frame_original_pointers_update(gpf_orig, gpf_eval);
+          gpf_eval = gpf_eval->next;
+        }
       }
-
-      /* Update frame reference pointers. */
-      gpf_eval->runtime.gpf_orig = (bGPDframe *)gpf_orig;
-      BKE_gpencil_frame_original_pointers_update(gpf_orig, gpf_eval);
+      gpl_eval = gpl_eval->next;
     }
   }
 }



More information about the Bf-blender-cvs mailing list