[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42428] branches/bmesh/blender/source/ blender/blenkernel/intern/DerivedMesh.c: fix [#29338] Viewport does not update when sculpting without a multires modifer
Campbell Barton
ideasman42 at gmail.com
Mon Dec 5 02:58:33 CET 2011
Revision: 42428
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42428
Author: campbellbarton
Date: 2011-12-05 01:58:24 +0000 (Mon, 05 Dec 2011)
Log Message:
-----------
fix [#29338] Viewport does not update when sculpting without a multires modifer
when no modifiers are applied, dont re-tessellate,
for future referece - this bug was caused because can_pbvh_draw() checks if (cddm->mvert == me->mvert)
re-tesselating the faces copies the vertex array so it was returning false.
Modified Paths:
--------------
branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c 2011-12-04 23:39:01 UTC (rev 42427)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c 2011-12-05 01:58:24 UTC (rev 42428)
@@ -1109,6 +1109,8 @@
int draw_flag= ((scene->toolsettings->multipaint ? CALC_WP_MULTIPAINT : 0) |
(scene->toolsettings->auto_normalize ? CALC_WP_AUTO_NORMALIZE : 0));
+ short do_re_tessellate;
+
if(mmd && !mmd->sculptlvl)
has_multires = 0;
@@ -1409,12 +1411,20 @@
dm->release(dm);
CDDM_apply_vert_coords(finaldm, deformedVerts);
+
+ /* BMESH_TODO, do_re_tesselate recalculates normals anyway, this seems redundant! - campbell */
CDDM_calc_normals(finaldm);
if((dataMask & CD_MASK_WEIGHT_MCOL) && (ob->mode & OB_MODE_WEIGHT_PAINT))
add_weight_mcol_dm(ob, finaldm, draw_flag);
+
+ do_re_tessellate= TRUE;
+
} else if(dm) {
finaldm = dm;
+
+ do_re_tessellate= TRUE;
+
} else {
int recalc_normals= 0;
@@ -1435,6 +1445,8 @@
if((dataMask & CD_MASK_WEIGHT_MCOL) && (ob->mode & OB_MODE_WEIGHT_PAINT))
add_weight_mcol_dm(ob, finaldm, draw_flag);
+
+ do_re_tessellate= FALSE;
}
/* add an orco layer if needed */
@@ -1457,14 +1469,24 @@
}
#endif /* WITH_GAMEENGINE */
- /* Re-tesselation is necessary to push render data (uvs, textures, colors)
- from loops and polys onto the tessfaces. This may be currently be redundant
- in cases where the render mode doesn't use these inputs, but ideally
- eventually tesselation would happen on-demand, and this is one of the primary
- places it would be needed. */
- finaldm->recalcTesselation(finaldm);
- finaldm->calcNormals(finaldm);
+ /* need to check when this isnt needed.
+ * - when the mesh has no modifiers (shouldnt be needed)
+ * - deform only? (unside, can try skip) but need to double check
+ * - rebuild mesh with constructive modifier (ofcourse)
+ *
+ * Need to watch this, it can cause issues, see bug [#29338]
+ */
+ if (do_re_tessellate) {
+ /* Re-tesselation is necessary to push render data (uvs, textures, colors)
+ * from loops and polys onto the tessfaces. This may be currently be redundant
+ * in cases where the render mode doesn't use these inputs, but ideally
+ * eventually tesselation would happen on-demand, and this is one of the primary
+ * places it would be needed. */
+ finaldm->recalcTesselation(finaldm);
+ finaldm->calcNormals(finaldm);
+ }
+
*final_r = finaldm;
if(orcodm)
More information about the Bf-blender-cvs
mailing list