[Bf-blender-cvs] [b0d6cbfeec5] greasepencil-object: Speed up multiedit loop
Antonio Vazquez
noreply at git.blender.org
Wed Aug 30 10:52:52 CEST 2017
Commit: b0d6cbfeec5dbf6a9baeca459d3f8b98dd93c148
Author: Antonio Vazquez
Date: Wed Aug 30 10:52:29 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rBb0d6cbfeec5dbf6a9baeca459d3f8b98dd93c148
Speed up multiedit loop
If not multiedit, avoid the loop in select
===================================================================
M source/blender/editors/gpencil/gpencil_brush.c
M source/blender/editors/gpencil/gpencil_intern.h
M source/blender/editors/screen/screen_context.c
M source/blender/editors/transform/transform_conversions.c
===================================================================
diff --git a/source/blender/editors/gpencil/gpencil_brush.c b/source/blender/editors/gpencil/gpencil_brush.c
index e6f10d9326a..a04ff64c3ac 100644
--- a/source/blender/editors/gpencil/gpencil_brush.c
+++ b/source/blender/editors/gpencil/gpencil_brush.c
@@ -1446,7 +1446,12 @@ static bool gpsculpt_brush_apply_standard(bContext *C, tGP_BrushEditData *gso)
CTX_DATA_BEGIN(C, bGPDlayer *, gpl, editable_gpencil_layers)
{
- for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
+ bGPDframe *init_gpf = gpl->actframe;
+ if (is_multiedit) {
+ init_gpf = gpl->frames.first;
+ }
+
+ for (bGPDframe *gpf = init_gpf; gpf; gpf = gpf->next) {
if ((gpf == gpl->actframe) || ((gpf->flag & GP_FRAME_SELECT) && (is_multiedit))) {
/* calculate difference matrix */
@@ -1541,6 +1546,10 @@ static bool gpsculpt_brush_apply_standard(bContext *C, tGP_BrushEditData *gso)
}
}
+ /* if not multiedit out of loop */
+ if (!is_multiedit) {
+ break;
+ }
}
}
CTX_DATA_END;
diff --git a/source/blender/editors/gpencil/gpencil_intern.h b/source/blender/editors/gpencil/gpencil_intern.h
index 0a217dbccf3..57abc007cc0 100644
--- a/source/blender/editors/gpencil/gpencil_intern.h
+++ b/source/blender/editors/gpencil/gpencil_intern.h
@@ -348,7 +348,11 @@ typedef enum ACTCONT_TYPES {
bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd_); \
CTX_DATA_BEGIN(C, bGPDlayer*, gpl, editable_gpencil_layers) \
{ \
- for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) { \
+ bGPDframe *init_gpf = gpl->actframe; \
+ if (is_multiedit) { \
+ init_gpf = gpl->frames.first; \
+ } \
+ for (bGPDframe *gpf = init_gpf; gpf; gpf = gpf->next) { \
if ((gpf == gpl->actframe) || ((gpf->flag & GP_FRAME_SELECT) && (is_multiedit))) { \
/* calculate difference matrix */ \
float diff_mat[4][4]; \
@@ -366,6 +370,9 @@ typedef enum ACTCONT_TYPES {
#define GP_EDITABLE_STROKES_END \
} \
} \
+ if (!is_multiedit) { \
+ break; \
+ } \
} \
} \
CTX_DATA_END; \
diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c
index fa11ad5cb41..737cc698aab 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -563,8 +563,12 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
if (gpencil_layer_is_editable(gpl) && (gpl->actframe)) {
bGPDframe *gpf;
bGPDstroke *gps;
+ bGPDframe *init_gpf = gpl->actframe;
+ if (is_multiedit) {
+ init_gpf = gpl->frames.first;
+ }
- for (gpf = gpl->frames.first; gpf; gpf = gpf->next) {
+ for (gpf = init_gpf; gpf; gpf = gpf->next) {
if ((gpf == gpl->actframe) || ((gpf->flag & GP_FRAME_SELECT) && (is_multiedit))) {
for (gps = gpf->strokes.first; gps; gps = gps->next) {
if (ED_gpencil_stroke_can_use_direct(sa, gps)) {
@@ -577,6 +581,10 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
}
}
}
+ /* if not multiedit out of loop */
+ if (!is_multiedit) {
+ break;
+ }
}
}
}
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 7a127c4f546..91c6a3551e2 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -7857,7 +7857,12 @@ static void createTransGPencil(bContext *C, TransInfo *t)
if (gpencil_layer_is_editable(gpl) && (gpl->actframe != NULL)) {
bGPDframe *gpf;
bGPDstroke *gps;
- for (gpf = gpl->frames.first; gpf; gpf = gpf->next) {
+ bGPDframe *init_gpf = gpl->actframe;
+ if (is_multiedit) {
+ init_gpf = gpl->frames.first;
+ }
+
+ for (gpf = init_gpf; gpf; gpf = gpf->next) {
if ((gpf == gpl->actframe) || ((gpf->flag & GP_FRAME_SELECT) && (is_multiedit))) {
for (gps = gpf->strokes.first; gps; gps = gps->next) {
@@ -7897,6 +7902,10 @@ static void createTransGPencil(bContext *C, TransInfo *t)
}
}
}
+ /* if not multiedit out of loop */
+ if (!is_multiedit) {
+ break;
+ }
}
}
}
@@ -7922,6 +7931,11 @@ static void createTransGPencil(bContext *C, TransInfo *t)
float diff_mat[4][4];
float inverse_diff_mat[4][4];
+ bGPDframe *init_gpf = gpl->actframe;
+ if (is_multiedit) {
+ init_gpf = gpl->frames.first;
+ }
+
/* calculate difference matrix */
ED_gpencil_parent_location(obact, gpd, gpl, diff_mat);
/* undo matrix */
@@ -7941,7 +7955,7 @@ static void createTransGPencil(bContext *C, TransInfo *t)
}
/* Loop over strokes, adding TransData for points as needed... */
- for (gpf = gpl->frames.first; gpf; gpf = gpf->next) {
+ for (gpf = init_gpf; gpf; gpf = gpf->next) {
if ((gpf == gpl->actframe) || ((gpf->flag & GP_FRAME_SELECT) && (is_multiedit))) {
for (gps = gpf->strokes.first; gps; gps = gps->next) {
TransData *head = td;
@@ -8057,6 +8071,10 @@ static void createTransGPencil(bContext *C, TransInfo *t)
}
}
}
+ /* if not multiedit out of loop */
+ if (!is_multiedit) {
+ break;
+ }
}
}
}
More information about the Bf-blender-cvs
mailing list