Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Goudey <h.goudey@me.com>2022-06-23 20:05:48 +0300
committerHans Goudey <h.goudey@me.com>2022-06-23 20:05:48 +0300
commit6dde88c5366be0d855fded2588290818fbf53928 (patch)
tree2b591e70c79161ee670ec8e176f7a018553ec65c /source/blender/editors
parent54182e4925de4ee7e49e4351479e79cb257acc73 (diff)
Vertex paint mode tried to do a "fast update" by trying to avoid tagging
the mesh ID for a full update. The conditions it uses are troublesome: 1. There must be an evaluated mesh 2. The evaluated mesh's active byte color layer must equal the original's This logic doesn't make sense for a few reasons. First of all, the `mloopcol` pointer doesn't make sense in the context of color attributes (rather than the old vertex colors), since it only points to byte color attribute on face corners. Second, just because the layer pointers are equal doesn't mean something doesn't depend on the attribute's values. I think the best solution currently is to remove this "fast update" case and instead work on optimizing the general case. Also, T95842 suggests removing these pointers, and this is one of the last remaining uses of `Mesh.mloopcol`. Differential Revision: https://developer.blender.org/D15275
Diffstat (limited to 'source/blender/editors')
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex.cc41
1 files changed, 1 insertions, 40 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_vertex.cc b/source/blender/editors/sculpt_paint/paint_vertex.cc
index 67b60acc667..ec7ba1741b7 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.cc
+++ b/source/blender/editors/sculpt_paint/paint_vertex.cc
@@ -227,22 +227,6 @@ static MDeformVert *defweight_prev_init(MDeformVert *dvert_prev,
return dv_prev;
}
-/* check if we can do partial updates and have them draw realtime
- * (without evaluating modifiers) */
-static bool vertex_paint_use_fast_update_check(Object *ob)
-{
- const Mesh *me_eval = BKE_object_get_evaluated_mesh(ob);
-
- if (me_eval != nullptr) {
- const Mesh *me = BKE_mesh_from_object(ob);
- if (me && me->mloopcol) {
- return (me->mloopcol == CustomData_get_layer(&me_eval->ldata, CD_PROP_BYTE_COLOR));
- }
- }
-
- return false;
-}
-
static void paint_last_stroke_update(Scene *scene, const float location[3])
{
UnifiedPaintSettings *ups = &scene->toolsettings->unified_paint_settings;
@@ -2838,12 +2822,6 @@ struct VPaintData : public VPaintDataBase {
struct VertProjHandle *vp_handle;
CoNo *vertexcosnos;
- /**
- * Modify #Mesh.mloopcol directly, since the derived mesh is drawing from this
- * array, otherwise we need to refresh the modifier stack.
- */
- bool use_fast_update;
-
/* loops tagged as having been painted, to apply shared vertex color
* blending only to modified loops */
bool *mlooptag;
@@ -2893,15 +2871,6 @@ static void *vpaint_init_vpaint(bContext *C,
vpd->is_texbrush = !(brush->vertexpaint_tool == VPAINT_TOOL_BLUR) && brush->mtex.tex;
- /* are we painting onto a modified mesh?,
- * if not we can skip face map trickiness */
- if (vertex_paint_use_fast_update_check(ob)) {
- vpd->use_fast_update = true;
- }
- else {
- vpd->use_fast_update = false;
- }
-
/* to keep tracked of modified loops for shared vertex color blending */
if (brush->vertexpaint_tool == VPAINT_TOOL_BLUR) {
vpd->mlooptag = (bool *)MEM_mallocN(sizeof(bool) * elem_num, "VPaintData mlooptag");
@@ -3901,15 +3870,7 @@ static void vpaint_stroke_update_step_intern(bContext *C, PaintStroke *stroke, P
ED_region_tag_redraw(vc->region);
- if (vpd->use_fast_update == false) {
- /* recalculate modifier stack to get new colors, slow,
- * avoid this if we can! */
- DEG_id_tag_update((ID *)ob->data, 0);
- }
- else {
- /* Flush changes through DEG. */
- DEG_id_tag_update((ID *)ob->data, ID_RECALC_COPY_ON_WRITE);
- }
+ DEG_id_tag_update((ID *)ob->data, ID_RECALC_GEOMETRY);
}
static void vpaint_stroke_update_step(bContext *C,