[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43639] branches/bmesh/blender/source/ blender: BMesh: Fix (re-enable) DynamicPaint previews in Object mode.
Bastien Montagne
montagne29 at wanadoo.fr
Mon Jan 23 17:32:19 CET 2012
Revision: 43639
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43639
Author: mont29
Date: 2012-01-23 16:32:11 +0000 (Mon, 23 Jan 2012)
Log Message:
-----------
BMesh: Fix (re-enable) DynamicPaint previews in Object mode.
Also simplifies DM_update_weight_mcol: no need to update CD_WEIGHT_MCOL here, as it is anyway recreated from CD_WEIGHT_MLOOPCOL at tesselation time. Only commented out code for now.
Modified Paths:
--------------
branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
branches/bmesh/blender/source/blender/blenkernel/intern/dynamicpaint.c
branches/bmesh/blender/source/blender/editors/space_view3d/drawobject.c
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c 2012-01-23 14:03:09 UTC (rev 43638)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c 2012-01-23 16:32:11 UTC (rev 43639)
@@ -1040,9 +1040,13 @@
ColorBand *coba= stored_cb; /* warning, not a local var */
unsigned char *wtcol_v;
+#if 0 /* See coment below. */
unsigned char *wtcol_f = dm->getTessFaceDataArray(dm, CD_WEIGHT_MCOL);
+#endif
unsigned char(*wtcol_l)[4] = CustomData_get_layer(dm->getLoopDataLayout(dm), CD_WEIGHT_MLOOPCOL);
+#if 0 /* See coment below. */
MFace *mf = dm->getTessFaceArray(dm);
+#endif
MLoop *mloop = dm->getLoopArray(dm), *ml;
MPoly *mp = dm->getPolyArray(dm);
int numFaces = dm->getNumTessFaces(dm);
@@ -1050,13 +1054,22 @@
int totloop;
int i, j;
+#if 0 /* See comment below */
/* If no CD_WEIGHT_MCOL existed yet, add a new one! */
if (!wtcol_f)
wtcol_f = CustomData_add_layer(&dm->faceData, CD_WEIGHT_MCOL, CD_CALLOC, NULL, numFaces);
if (wtcol_f) {
unsigned char *wtcol_f_step = wtcol_f;
+# else
+ /* XXX Seems we still need to create a CD_WEIGHT_MCOL, else it sigsev...
+ * Strange that we do not have that problem with DPaint VCol preview? */
+ if(!dm->getTessFaceDataArray(dm, CD_WEIGHT_MCOL))
+ CustomData_add_layer(&dm->faceData, CD_WEIGHT_MCOL, CD_CALLOC, NULL, numFaces);
+ {
+#endif
+
/* Weights are given by caller. */
if (weights) {
float *w = weights;
@@ -1082,6 +1095,10 @@
/* Now copy colors in all face verts. */
/*first add colors to the tesselation faces*/
+ /* XXX Why update that layer? We have to update WEIGHT_MLOOPCOL anyway,
+ * and tesselation recreates mface layers from mloop/mpoly ones, so no
+ * need to fill WEIGHT_MCOL here. */
+#if 0
for (i = 0; i < numFaces; i++, mf++, wtcol_f_step += (4 * 4)) {
/*origindex being NULL means we're operating on original mesh data*/
#if 0
@@ -1103,7 +1120,7 @@
(char *)&wtcol_v[4 * (*(&mf->v1 + fidx))]);
} while (fidx--);
}
-
+#endif
/*now add to loops, so the data can be passed through the modifier stack*/
/* If no CD_WEIGHT_MLOOPCOL existed yet, we have to add a new one! */
if (!wtcol_l) {
@@ -1470,10 +1487,6 @@
range_vn_i(DM_get_edge_data_layer(dm, CD_ORIGINDEX), dm->numEdgeData, 0);
range_vn_i(DM_get_poly_data_layer(dm, CD_ORIGINDEX), dm->numPolyData, 0);
}
-
-/* if((dataMask & CD_MASK_WEIGHT_MCOL) && (ob->mode & OB_MODE_WEIGHT_PAINT))*/
-/* add_weight_mcol_dm(ob, dm, draw_flag);*/
-
}
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/dynamicpaint.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/dynamicpaint.c 2012-01-23 14:03:09 UTC (rev 43638)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/dynamicpaint.c 2012-01-23 16:32:11 UTC (rev 43639)
@@ -1604,14 +1604,14 @@
}
/* viewport preview */
- if (0 && surface->flags & MOD_DPAINT_PREVIEW) {
+ if (surface->flags & MOD_DPAINT_PREVIEW) {
MPoly *mp = CDDM_get_polys(result);
int totpoly = result->numPolyData;
/* Save preview results to weight layer to be
* able to share same drawing methods */
- col = CustomData_get_layer(&dm->loopData, CD_WEIGHT_MLOOPCOL);
- if (!col) col = CustomData_add_layer(&dm->loopData, CD_WEIGHT_MLOOPCOL, CD_CALLOC, NULL, totloop);
+ col = CustomData_get_layer(&result->loopData, CD_WEIGHT_MLOOPCOL);
+ if (!col) col = CustomData_add_layer(&result->loopData, CD_WEIGHT_MLOOPCOL, CD_CALLOC, NULL, totloop);
if (col) {
#pragma omp parallel for schedule(static)
@@ -1703,7 +1703,7 @@
float *weight = (float*)sData->type_data;
/* viewport preview */
- if (0 && surface->flags & MOD_DPAINT_PREVIEW) {
+ if (surface->flags & MOD_DPAINT_PREVIEW) {
/* Save preview results to weight layer to be
* able to share same drawing methods */
DM_update_weight_mcol(ob, result, 0, weight, 0, NULL);
Modified: branches/bmesh/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/space_view3d/drawobject.c 2012-01-23 14:03:09 UTC (rev 43638)
+++ branches/bmesh/blender/source/blender/editors/space_view3d/drawobject.c 2012-01-23 16:32:11 UTC (rev 43639)
@@ -3158,7 +3158,7 @@
/* Check to draw dynamic paint colors (or weights from WeightVG modifiers).
* Note: Last "preview-active" modifier in stack will win! */
- if(DM_get_poly_data_layer(dm, CD_WEIGHT_MCOL) && modifiers_isPreview(ob))
+ if(DM_get_tessface_data_layer(dm, CD_WEIGHT_MCOL) && modifiers_isPreview(ob))
draw_flags |= DRAW_MODIFIERS_PREVIEW;
/* Unwanted combination */
More information about the Bf-blender-cvs
mailing list