Revision: 46521
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46521
Author: nicholasbishop
Date: 2012-05-10 20:34:23 +0000 (Thu, 10 May 2012)
Log Message:
-----------
Copy GridPaintMask to vertex paint mask when applying multires.
Adds new subsurf_copy_grid_paint_mask() function similar to
subsurf_copy_grid_hidden().
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_subsurf.h
trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
trunk/blender/source/blender/modifiers/intern/MOD_multires.c
Modified: trunk/blender/source/blender/blenkernel/BKE_subsurf.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_subsurf.h 2012-05-10
20:34:08 UTC (rev 46520)
+++ trunk/blender/source/blender/blenkernel/BKE_subsurf.h 2012-05-10
20:34:23 UTC (rev 46521)
@@ -83,6 +83,10 @@
struct MVert *mvert,
const struct MDisps
*mdisps);
+void subsurf_copy_grid_paint_mask(struct DerivedMesh *dm,
+ const struct
MPoly *mpoly, float *paint_mask,
+ const struct
GridPaintMask *grid_paint_mask);
+
typedef enum MultiresModifiedFlags {
/* indicates the grids have been sculpted on, so MDisps
* have to be updated */
Modified: trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
2012-05-10 20:34:08 UTC (rev 46520)
+++ trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
2012-05-10 20:34:23 UTC (rev 46521)
@@ -1047,6 +1047,45 @@
}
}
+/* Translate GridPaintMask into vertex paint masks. Assumes vertices
+ are in the order output by ccgDM_copyFinalVertArray. */
+void subsurf_copy_grid_paint_mask(DerivedMesh *dm, const MPoly *mpoly,
+ float
*paint_mask,
+ const
GridPaintMask *grid_paint_mask)
+{
+ CCGDerivedMesh *ccgdm = (CCGDerivedMesh*)dm;
+ CCGSubSurf *ss = ccgdm->ss;
+ int level = ccgSubSurf_getSubdivisionLevels(ss);
+ int gridSize = ccgSubSurf_getGridSize(ss);
+ int edgeSize = ccgSubSurf_getEdgeSize(ss);
+ int totface = ccgSubSurf_getNumFaces(ss);
+ int i, j, x, y, factor, gpm_gridsize;
+
+ for(i = 0; i < totface; i++) {
+ CCGFace *f = ccgdm->faceMap[i].face;
+ const MPoly *p = &mpoly[i];
+
+ for(j = 0; j < p->totloop; j++) {
+ const GridPaintMask *gpm =
&grid_paint_mask[p->loopstart + j];
+ if(!gpm->data)
+ continue;
+
+ factor = ccg_factor(level, gpm->level);
+ gpm_gridsize = ccg_gridsize(gpm->level);
+
+ for(y = 0; y < gridSize; y++) {
+ for(x = 0; x < gridSize; x++) {
+ int vndx, offset;
+
+ vndx = getFaceIndex(ss, f, j, x, y,
edgeSize, gridSize);
+ offset = y*factor * gpm_gridsize +
x*factor;
+ paint_mask[vndx] = gpm->data[offset];
+ }
+ }
+ }
+ }
+}
+
static void ccgDM_copyFinalVertArray(DerivedMesh *dm, MVert *mvert)
{
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
Modified: trunk/blender/source/blender/modifiers/intern/MOD_multires.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_multires.c
2012-05-10 20:34:08 UTC (rev 46520)
+++ trunk/blender/source/blender/modifiers/intern/MOD_multires.c
2012-05-10 20:34:23 UTC (rev 46521)
@@ -100,10 +100,14 @@
cddm = CDDM_copy(result);
- /* copy hidden flag to vertices */
+ /* copy hidden/masks to vertices */
if (!useRenderParams) {
struct MDisps *mdisps;
+ struct GridPaintMask *grid_paint_mask;
+
mdisps = CustomData_get_layer(&me->ldata, CD_MDISPS);
+ grid_paint_mask = CustomData_get_layer(&me->ldata,
CD_GRID_PAINT_MASK);
+
if (mdisps) {
subsurf_copy_grid_hidden(result, me->mpoly,
cddm->getVertArray(cddm),
@@ -116,6 +120,15 @@
cddm->getPolyArray(cddm),
cddm->getNumPolys(cddm));
}
+ if(grid_paint_mask) {
+ float *paint_mask =
CustomData_add_layer(&cddm->vertData,
+
CD_PAINT_MASK,
+
CD_CALLOC, NULL,
+
cddm->getNumVerts(cddm));
+
+ subsurf_copy_grid_paint_mask(result, me->mpoly,
+
paint_mask, grid_paint_mask);
+ }
}
result->release(result);
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs