Fix sculpt mask interpolation in subdivisions

The interpolation function of the datalayer was misssing so the sculpt
mask data was corrupted every time a subdivision surface modifier was
applied.

Reviewed By: jbakker

Differential Revision: https://developer.blender.org/D7640
This commit is contained in:
Pablo Dobarro 2020-05-19 01:31:26 +02:00
parent 7c9c8cee7b
commit ff7a30d928
Notes: blender-bot 2023-02-14 06:55:40 +01:00
Referenced by issue #76881, Selecting Fluid>Mesh>"Use Speed Vectors" deletes all existing cache without warning
1 changed files with 19 additions and 1 deletions

View File

@ -699,6 +699,24 @@ static size_t layerFilesize_mdisps(CDataFile *UNUSED(cdf), const void *data, int
return size;
}
static void layerInterp_paint_mask(
const void **sources, const float *weights, const float *sub_weights, int count, void *dest)
{
float mask = 0.0f;
const float *sub_weight = sub_weights;
for (int i = 0; i < count; i++) {
float weight = weights ? weights[i] : 1.0f;
const float *src = sources[i];
if (sub_weights) {
mask += (*src) * (*sub_weight) * weight;
sub_weight++;
}
else {
mask += (*src) * weight;
}
}
*(float *)dest = mask;
}
static void layerCopy_grid_paint_mask(const void *source, void *dest, int count)
{
@ -1595,7 +1613,7 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
/* END BMESH ONLY */
/* 34: CD_PAINT_MASK */
{sizeof(float), "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
{sizeof(float), "", 0, NULL, NULL, NULL, layerInterp_paint_mask, NULL, NULL},
/* 35: CD_GRID_PAINT_MASK */
{sizeof(GridPaintMask),
"GridPaintMask",