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:
authorNicholas Bishop <nicholasbishop@gmail.com>2012-05-11 00:34:23 +0400
committerNicholas Bishop <nicholasbishop@gmail.com>2012-05-11 00:34:23 +0400
commit0f57b0f1e514c8f13f2fcfeb71c6291640f88794 (patch)
tree9a8538f463a31b82a1b3639f74bb526645390d6c /source/blender/blenkernel
parentf4929ad609727354bb6356aef788e8f2fa92d341 (diff)
Copy GridPaintMask to vertex paint mask when applying multires.
Adds new subsurf_copy_grid_paint_mask() function similar to subsurf_copy_grid_hidden().
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_subsurf.h4
-rw-r--r--source/blender/blenkernel/intern/subsurf_ccg.c39
2 files changed, 43 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_subsurf.h b/source/blender/blenkernel/BKE_subsurf.h
index 60a1e6ab68f..9bb815c3e7d 100644
--- a/source/blender/blenkernel/BKE_subsurf.h
+++ b/source/blender/blenkernel/BKE_subsurf.h
@@ -83,6 +83,10 @@ void subsurf_copy_grid_hidden(struct DerivedMesh *dm,
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 */
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index c6b3a8d3aba..3d5bc6051c5 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -1047,6 +1047,45 @@ void subsurf_copy_grid_hidden(DerivedMesh *dm, const MPoly *mpoly,
}
}
+/* 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;