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:
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
|
@ -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",
|
||||
|
|
Loading…
Reference in New Issue