[Bf-blender-cvs] [8f3d40820e3] temp-lineart-contained: LineArt: Fix cache nullptr bug.
YimingWu
noreply at git.blender.org
Wed Apr 21 13:24:15 CEST 2021
Commit: 8f3d40820e3272cb29362f4608f0606786c4e88a
Author: YimingWu
Date: Wed Apr 21 19:23:58 2021 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rB8f3d40820e3272cb29362f4608f0606786c4e88a
LineArt: Fix cache nullptr bug.
===================================================================
M source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
M source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
M source/blender/gpencil_modifiers/intern/lineart/lineart_chain.c
M source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
M source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c
===================================================================
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
index 5242f3575bd..203f56b11e7 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
@@ -160,6 +160,10 @@ static void generateStrokes(GpencilModifierData *md, Depsgraph *depsgraph, Objec
MOD_lineart_compute_feature_lines(depsgraph, lmd, &gpd->runtime.lineart_cache);
MOD_lineart_destroy_render_data(lmd);
}
+ else {
+ MOD_lineart_chain_clear_picked_flag(gpd->runtime.lineart_cache);
+ lmd->cache = gpd->runtime.lineart_cache;
+ }
generate_strokes_actual(md, depsgraph, ob, gpl, gpf);
diff --git a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
index 53dd2033f4a..b2bd22c98ec 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
+++ b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
@@ -602,7 +602,7 @@ void MOD_lineart_chain_discard_short(LineartRenderBuffer *rb, const float thresh
void MOD_lineart_chain_split_angle(LineartRenderBuffer *rb, float angle_threshold_rad);
int MOD_lineart_chain_count(const LineartLineChain *rlc);
-void MOD_lineart_chain_clear_picked_flag(struct LineartRenderBuffer *rb);
+void MOD_lineart_chain_clear_picked_flag(LineartCache *lc);
bool MOD_lineart_compute_feature_lines(struct Depsgraph *depsgraph,
struct LineartGpencilModifierData *lmd,
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_chain.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_chain.c
index bee002f8217..afec963f8e9 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_chain.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_chain.c
@@ -889,12 +889,12 @@ int MOD_lineart_chain_count(const LineartLineChain *rlc)
return count;
}
-void MOD_lineart_chain_clear_picked_flag(LineartRenderBuffer *rb)
+void MOD_lineart_chain_clear_picked_flag(LineartCache *lc)
{
- if (rb == NULL) {
+ if (lc == NULL) {
return;
}
- LISTBASE_FOREACH (LineartLineChain *, rlc, &rb->chains) {
+ LISTBASE_FOREACH (LineartLineChain *, rlc, &lc->chains) {
rlc->picked = 0;
}
}
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index ce0264b682d..ee21dede4c1 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -3961,13 +3961,8 @@ bool MOD_lineart_compute_feature_lines(Depsgraph *depsgraph,
/* Then we connect chains based on the _proximity_ of their end points in image space, here's
* the place threshold value gets involved. */
-
- /* do_geometry_space = true. */
MOD_lineart_chain_connect(rb);
- /* After chaining, we need to clear flags so we don't confuse GPencil generation calls. */
- MOD_lineart_chain_clear_picked_flag(rb);
-
float *t_image = &lmd->chaining_image_threshold;
/* This configuration ensures there won't be accidental lost of short unchained segments. */
MOD_lineart_chain_discard_short(rb, MIN2(*t_image, 0.001f) - FLT_EPSILON);
@@ -3978,6 +3973,9 @@ bool MOD_lineart_compute_feature_lines(Depsgraph *depsgraph,
/* Finally transfer the result list into cache. */
memcpy(&lc->chains, &rb->chains, sizeof(ListBase));
+
+ /* At last, we need to clear flags so we don't confuse GPencil generation calls. */
+ MOD_lineart_chain_clear_picked_flag(lc);
}
if (G.debug_value == 4000) {
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c
index 38ec422595b..ce0001fe4d2 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c
@@ -116,6 +116,10 @@ static bool bake_strokes(
MOD_lineart_compute_feature_lines(dg, lmd, lc);
MOD_lineart_destroy_render_data(lmd);
}
+ else {
+ MOD_lineart_chain_clear_picked_flag(gpd->runtime.lineart_cache);
+ lmd->cache = gpd->runtime.lineart_cache;
+ }
MOD_lineart_gpencil_generate(
lmd->cache,
More information about the Bf-blender-cvs
mailing list