v1.z * b[0] + v2.z * b[1] + v3.z * b[2]);
}
+/*
+ * Interpolate smoothly between three texture coordinates with barycentric
+ * coordinates and perspective correction.
+ */
+INLINE_MAYBE
+vec_t vec_tinterp(vec_t v1, vec_t v2, vec_t v3, scal_t b[3])
+{
+ scal_t denom = (S(1.0) / v1.w) * b[0]
+ + (S(1.0) / v2.w) * b[1]
+ + (S(1.0) / v3.w) * b[2];
+ return vec_new(scal_clamp(((v1.x / v1.w) * b[0]
+ + (v2.x / v2.w) * b[1]
+ + (v3.x / v3.w) * b[2]) / denom, S(0.0), S(1.0)),
+ scal_clamp(((v1.y / v1.w) * b[0]
+ + (v2.y / v2.w) * b[1]
+ + (v3.y / v3.w) * b[2]) / denom, S(0.0), S(1.0)),
+ S(0.0));
+}
#endif // _VEC_H_