diff options
author | qonnop <qonnop@users.noreply.github.com> | 2018-10-06 07:05:17 +0200 |
---|---|---|
committer | qonnop <qonnop@users.noreply.github.com> | 2018-10-06 15:52:42 +0200 |
commit | bbfc6f698511dfdfa44e61aa88bd5678dda06bd8 (patch) | |
tree | ac2e52bb72a3e85544bc5bcb893b553f78b9b9b7 | |
parent | f12cb82e0f7b3348ab678322cf5e729b38861f1e (diff) |
Fixed int interpolation issue, closes #22763
When interpolating between two equal int values a and b, floating point
calculation imprecisions can result in different values depending on
the interpolation factor.
-rw-r--r-- | core/variant_op.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/core/variant_op.cpp b/core/variant_op.cpp index 9afc31a772..7389b7a71a 100644 --- a/core/variant_op.cpp +++ b/core/variant_op.cpp @@ -3542,7 +3542,10 @@ void Variant::interpolate(const Variant &a, const Variant &b, float c, Variant & case INT: { int64_t va = a._data._int; int64_t vb = b._data._int; - r_dst = int((1.0 - c) * va + vb * c); + if (va != vb) + r_dst = int((1.0 - c) * va + vb * c); + else //avoid int casting issues + r_dst = a; } return; case REAL: { |