[Bf-blender-cvs] [497633df39c] lanpr-under-gp: LANPR: Background calculation now doesn't block user input. (Messy code for now)
YimingWu
noreply at git.blender.org
Mon Jun 8 09:51:07 CEST 2020
Commit: 497633df39c89e515ba99b8a8dbf0a34533a01a8
Author: YimingWu
Date: Mon Jun 8 15:51:00 2020 +0800
Branches: lanpr-under-gp
https://developer.blender.org/rB497633df39c89e515ba99b8a8dbf0a34533a01a8
LANPR: Background calculation now doesn't block user input. (Messy code for now)
===================================================================
M source/blender/editors/lanpr/lanpr_cpu.c
===================================================================
diff --git a/source/blender/editors/lanpr/lanpr_cpu.c b/source/blender/editors/lanpr/lanpr_cpu.c
index 647e56b554f..b3173d8c4a0 100644
--- a/source/blender/editors/lanpr/lanpr_cpu.c
+++ b/source/blender/editors/lanpr/lanpr_cpu.c
@@ -3772,8 +3772,8 @@ int ED_lanpr_compute_feature_lines_internal(Depsgraph *depsgraph, const int inte
/* This configuration ensures there won't be accidental lost of short segments */
ED_lanpr_discard_short_chains(rb, MIN3(t_image, t_geom, 0.01f) - FLT_EPSILON);
}
-
- ED_lanpr_calculation_set_flag(LANPR_RENDER_FINISHED);
+ // Set after GP done.
+ // ED_lanpr_calculation_set_flag(LANPR_RENDER_FINISHED);
return OPERATOR_FINISHED;
}
@@ -3783,10 +3783,14 @@ typedef struct LANPR_FeatureLineWorker {
int intersection_only;
} LANPR_FeatureLineWorker;
+static void lanpr_update_gp_strokes_actual(Scene *scene, Depsgraph *dg);
+
static void lanpr_compute_feature_lines_worker(TaskPool *__restrict UNUSED(pool),
LANPR_FeatureLineWorker *worker_data)
{
ED_lanpr_compute_feature_lines_internal(worker_data->dg, worker_data->intersection_only);
+ lanpr_update_gp_strokes_actual(DEG_get_evaluated_scene(worker_data->dg), worker_data->dg);
+ ED_lanpr_calculation_set_flag(LANPR_RENDER_FINISHED);
}
void ED_lanpr_compute_feature_lines_background(Depsgraph *dg, const int intersection_only)
@@ -3797,7 +3801,7 @@ void ED_lanpr_compute_feature_lines_background(Depsgraph *dg, const int intersec
BLI_spin_unlock(&lanpr_share.lock_render_status);
/* If the calculation is already started then bypass it. */
- if (!ED_lanpr_calculation_flag_check(LANPR_RENDER_IDLE)) {
+ if (ED_lanpr_calculation_flag_check(LANPR_RENDER_RUNNING)) {
/* Release lock when early return. */
BLI_spin_unlock(&lanpr_share.lock_loader);
return;
@@ -3852,12 +3856,12 @@ static int lanpr_compute_feature_lines_exec(bContext *C, wmOperator *op)
*/
BLI_spin_lock(&lanpr_share.lock_loader);
- result = ED_lanpr_compute_feature_lines_internal(CTX_data_depsgraph_pointer(C),
- 0); // intersections_only);
+ ED_lanpr_compute_feature_lines_background(CTX_data_depsgraph_pointer(C),
+ 0); // intersections_only);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, NULL);
- return result;
+ return OPERATOR_FINISHED;
}
static void lanpr_compute_feature_lines_cancel(bContext *UNUSED(C), wmOperator *UNUSED(op))
{
@@ -4421,8 +4425,11 @@ void ED_lanpr_post_frame_update_external(Scene *s, Depsgraph *dg)
return;
}
if (s->lanpr.flags & LANPR_AUTO_UPDATE) {
- ED_lanpr_compute_feature_lines_internal(dg, 0);
- lanpr_update_gp_strokes_actual(s, dg);
+ ED_lanpr_compute_feature_lines_background(dg, 0);
+
+ /* Wait for loading finish */
+ BLI_spin_lock(&lanpr_share.lock_loader);
+ BLI_spin_unlock(&lanpr_share.lock_loader);
}
}
More information about the Bf-blender-cvs
mailing list