Browse Source

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.
qonnop 6 years ago
parent
commit
bbfc6f6985
1 changed files with 4 additions and 1 deletions
  1. 4 1
      core/variant_op.cpp

+ 4 - 1
core/variant_op.cpp

@@ -3542,7 +3542,10 @@ void Variant::interpolate(const Variant &a, const Variant &b, float c, Variant &
 		case INT: {
 		case INT: {
 			int64_t va = a._data._int;
 			int64_t va = a._data._int;
 			int64_t vb = b._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;
 			return;
 		case REAL: {
 		case REAL: {