[Bf-blender-cvs] [f7bf7bec995] sculpt-dev: Sculpt: move dyntopo command to top of command list.
Joseph Eagar
noreply at git.blender.org
Mon Oct 18 00:03:57 CEST 2021
Commit: f7bf7bec995545d801330e698c1ce069eda21e17
Author: Joseph Eagar
Date: Sun Oct 17 15:02:49 2021 -0700
Branches: sculpt-dev
https://developer.blender.org/rBf7bf7bec995545d801330e698c1ce069eda21e17
Sculpt: move dyntopo command to top of command list.
* Dyntopo is now run before other commands in the
brush command lists.
* Fixed nasty command subspacing bug.
* Added a missing RNA library override flag.
===================================================================
M source/blender/blenkernel/intern/brush_engine.c
M source/blender/blenkernel/intern/dyntopo.c
M source/blender/editors/sculpt_paint/sculpt.c
M source/blender/makesrna/intern/rna_brush_engine.c
===================================================================
diff --git a/source/blender/blenkernel/intern/brush_engine.c b/source/blender/blenkernel/intern/brush_engine.c
index 82d8d8f8b75..dce81430b78 100644
--- a/source/blender/blenkernel/intern/brush_engine.c
+++ b/source/blender/blenkernel/intern/brush_engine.c
@@ -1585,6 +1585,9 @@ static void bke_builtin_commandlist_create_paint(Brush *brush,
autosmooth_spacing = BRUSHSET_GET_FLOAT(chset, spacing, NULL);
}
+ bool hard_edge_mode = BRUSHSET_GET_INT(chset, hard_edge_mode, NULL);
+ commandlist_add_dyntopo(chset, cl, brush, tool, hard_edge_mode, radius);
+
float autosmooth = BRUSHSET_GET_FLOAT(chset, autosmooth, NULL);
if (autosmooth > 0.0f) {
cmd = BKE_brush_command_init(BKE_brush_commandlist_add(cl, chset, true), SCULPT_TOOL_SMOOTH);
@@ -1625,9 +1628,6 @@ static void bke_builtin_commandlist_create_paint(Brush *brush,
#undef GETF
- bool hard_edge_mode = BRUSHSET_GET_INT(chset, hard_edge_mode, NULL);
- commandlist_add_dyntopo(chset, cl, brush, tool, hard_edge_mode, radius);
-
// float
}
@@ -1679,13 +1679,17 @@ void BKE_builtin_commandlist_create(Brush *brush,
return;
}
+ float radius = BKE_brush_channelset_get_float(chset, "radius", NULL);
+
+ /* build dyntopo command */
+ commandlist_add_dyntopo(chset, cl, brush, tool, hard_edge_mode, radius);
+
+ /* build main brush command */
cmd = BKE_brush_commandlist_add(cl, chset, true);
BKE_brush_command_init(cmd, tool);
BKE_builtin_apply_hard_edge_mode(cmd->params, hard_edge_mode);
BKE_brush_commandset_inherit_all_mappings(cmd->params);
- float radius = BKE_brush_channelset_get_float(chset, "radius", NULL);
-
bool no_autosmooth = ELEM(tool, SCULPT_TOOL_BOUNDARY, SCULPT_TOOL_SMOOTH, SCULPT_TOOL_MASK);
bool no_rake = ELEM(tool, SCULPT_TOOL_BOUNDARY, SCULPT_TOOL_MASK);
;
@@ -1787,9 +1791,6 @@ void BKE_builtin_commandlist_create(Brush *brush,
BKE_brush_commandset_inherit_all_mappings(cmd->params);
}
-
- /* build dyntopo command */
- commandlist_add_dyntopo(chset, cl, brush, tool, hard_edge_mode, radius);
}
void BKE_brush_channelset_read_lib(BlendLibReader *reader, ID *id, BrushChannelSet *chset)
diff --git a/source/blender/blenkernel/intern/dyntopo.c b/source/blender/blenkernel/intern/dyntopo.c
index 79170665075..38950cc183e 100644
--- a/source/blender/blenkernel/intern/dyntopo.c
+++ b/source/blender/blenkernel/intern/dyntopo.c
@@ -582,8 +582,6 @@ BLI_INLINE void surface_smooth_v_safe(PBVH *pbvh, BMVert *v, float fac)
copy_v3_v3(origno1, dot_v3v3(mv1->origno, mv1->origno) == 0.0f ? v->no : mv1->origno);
}
- // BKE_pbvh_bmesh_check_origdata(pbvh, v, pbvh->stroke_id);
-
zero_v3(co);
zero_v3(origco);
@@ -2132,6 +2130,7 @@ static void long_edge_queue_task_cb(void *__restrict userdata,
const TaskParallelTLS *__restrict tls)
{
EdgeQueueThreadData *tdata = ((EdgeQueueThreadData *)userdata) + n;
+ PBVH *pbvh = tdata->pbvh;
PBVHNode *node = tdata->node;
EdgeQueueContext *eq_ctx = tdata->eq_ctx;
RNG *rng = BLI_rng_new(_long_edge_queue_task_cb_seed++); // I don't care if seed becomes mangled
@@ -2144,7 +2143,8 @@ static void long_edge_queue_task_cb(void *__restrict userdata,
BLI_array_declare(faces);
bool do_smooth = eq_ctx->surface_smooth_fac > 0.0f;
- BKE_pbvh_bmesh_check_tris(tdata->pbvh, node);
+ BKE_pbvh_bmesh_check_tris(pbvh, node);
+ int ni = node - pbvh->nodes;
const char facetag = BM_ELEM_TAG_ALT;
@@ -2211,6 +2211,11 @@ static void long_edge_queue_task_cb(void *__restrict userdata,
do {
MSculptVert *mv = BKE_PBVH_SCULPTVERT(eq_ctx->cd_sculpt_vert, l_iter->v);
+ /* are we owned by this node? if so, make sure origdata is up to date */
+ if (BM_ELEM_CD_GET_INT(l_iter->v, pbvh->cd_vert_node_offset) == ni) {
+ BKE_pbvh_bmesh_check_origdata(pbvh, l_iter->v, pbvh->stroke_id);
+ }
+
/*
If valence is not up to date, just add it to the list;
long_edge_queue_create will check and de-duplicate this for us.
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index bada9f09a41..2e78f41c616 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -10125,7 +10125,7 @@ static void SCULPT_run_commandlist(
&cmd->last_spacing_t[SCULPT_get_symmetry_pass(ss)]);
if (!noskip) {
- return;
+ continue;
}
BrushRunCommandData data = {
@@ -11427,8 +11427,8 @@ static void sculpt_update_cache_variants(bContext *C, Sculpt *sd, Object *ob, Po
float delta_mouse[2];
- sub_v3_v3v3(delta_mouse, cache->mouse, cache->mouse_event);
- float speed = len_v3(delta_mouse) / (800000.0f); /*get a reasonably usable value*/
+ sub_v2_v2v2(delta_mouse, cache->mouse, cache->mouse_event);
+ float speed = len_v2(delta_mouse) / (800000.0f); /*get a reasonably usable value*/
speed /= PIL_check_seconds_timer() - cache->last_speed_time;
cache->input_mapping.speed = sculpt_update_speed_average(ss, speed);
diff --git a/source/blender/makesrna/intern/rna_brush_engine.c b/source/blender/makesrna/intern/rna_brush_engine.c
index 85071255d42..f17f57db540 100644
--- a/source/blender/makesrna/intern/rna_brush_engine.c
+++ b/source/blender/makesrna/intern/rna_brush_engine.c
@@ -799,13 +799,15 @@ void RNA_def_brush_curve(BlenderRNA *brna)
prop = RNA_def_property(srna, "curve_preset", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, "BrushCurve", "preset");
RNA_def_property_enum_items(prop, brush_curve_preset_items);
- RNA_def_property_ui_text(prop, "Curve Preset", "");
+ RNA_def_property_ui_text(prop, "Curve Pre set", "");
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "CurveMapping");
RNA_def_property_ui_text(prop, "Curve Sensitivity", "Curve used for the sensitivity");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_pointer_funcs(prop, "rna_BrushCurve_curve_get", NULL, NULL, NULL);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
}
void RNA_def_brush_channel(BlenderRNA *brna)
@@ -832,6 +834,7 @@ void RNA_def_brush_channel(BlenderRNA *brna)
"rna_BrushChannel_category_set");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, "BrushChannel", "name");
More information about the Bf-blender-cvs
mailing list