Browse Source

Merge pull request #43534 from lawnjelly/ewok_skel_fix4

Fix 2d software skinning with scaled polys
Rémi Verschelde 4 years ago
parent
commit
c9bce23014
1 changed files with 5 additions and 2 deletions
  1. 5 2
      drivers/gles_common/rasterizer_canvas_batcher.h

+ 5 - 2
drivers/gles_common/rasterizer_canvas_batcher.h

@@ -1625,13 +1625,16 @@ PREAMBLE(bool)::_software_skin_poly(RasterizerCanvas::Item::CommandPolygon *p_po
 
 	if (num_verts && (p_poly->bones.size() == num_verts * 4) && (p_poly->weights.size() == p_poly->bones.size())) {
 
+		const Transform2D &item_transform = p_item->xform;
+		Transform2D item_transform_inv = item_transform.affine_inverse();
+
 		for (int n = 0; n < num_verts; n++) {
 			const Vector2 &src_pos = p_poly->points[n];
 			Vector2 &dst_pos = pTemps[n];
 
 			// there can be an offset on the polygon at rigging time, this has to be accounted for
 			// note it may be possible that this could be concatenated with the bone transforms to save extra transforms - not sure yet
-			Vector2 src_pos_back_transformed = p_item->xform.xform(src_pos);
+			Vector2 src_pos_back_transformed = item_transform.xform(src_pos);
 
 			float total_weight = 0.0f;
 
@@ -1661,7 +1664,7 @@ PREAMBLE(bool)::_software_skin_poly(RasterizerCanvas::Item::CommandPolygon *p_po
 				dst_pos /= total_weight;
 
 				// retransform back from the poly offset space
-				dst_pos = p_item->xform.xform_inv(dst_pos);
+				dst_pos = item_transform_inv.xform(dst_pos);
 			}
 		}