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
path: root/source
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2022-05-31 20:23:52 +0300
committerJacques Lucke <jacques@blender.org>2022-05-31 20:23:52 +0300
commitdc389a61529d335ebdcc28882c8961f78c7c3d0c (patch)
tree3a50aba0b0edae4c753d4b25c8f90ce091348519 /source
parentf2cd7e08fed02fdf02060c17c943e15e85638cb5 (diff)
Fix T98454: subdivision doesn't propagate int attributes
Differential Revision: https://developer.blender.org/D15083
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/customdata.cc20
1 files changed, 19 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/customdata.cc b/source/blender/blenkernel/intern/customdata.cc
index 62351a31042..1d9f377abec 100644
--- a/source/blender/blenkernel/intern/customdata.cc
+++ b/source/blender/blenkernel/intern/customdata.cc
@@ -54,6 +54,8 @@
/* only for customdata_data_transfer_interp_normal_normals */
#include "data_transfer_intern.h"
+using blender::IndexRange;
+
/* number of layers to add when growing a CustomData object */
#define CUSTOMDATA_GROW 5
@@ -517,6 +519,22 @@ static void layerCopy_propInt(const void *source, void *dest, int count)
memcpy(dest, source, sizeof(MIntProperty) * count);
}
+static void layerInterp_propInt(const void **sources,
+ const float *weights,
+ const float *UNUSED(sub_weights),
+ int count,
+ void *dest)
+{
+ float result = 0.0f;
+ for (const int i : IndexRange(count)) {
+ const float weight = weights[i];
+ const float src = *static_cast<const int *>(sources[i]);
+ result += src * weight;
+ }
+ const int rounded_result = static_cast<int>(round(result));
+ *static_cast<int *>(dest) = rounded_result;
+}
+
/** \} */
/* -------------------------------------------------------------------- */
@@ -1679,7 +1697,7 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
N_("Int"),
layerCopy_propInt,
nullptr,
- nullptr,
+ layerInterp_propInt,
nullptr},
/* 12: CD_PROP_STRING */
{sizeof(MStringProperty),