Browse Source

[flutter] Closes #2383, fix allocations of temp structs for Windows.

Dart FFIs MallocAllocator does in fact not use malloc...

# Conflicts:
#	spine-flutter/lib/assets/libspine_flutter.wasm
Mario Zechner 2 years ago
parent
commit
b89d550711

BIN
spine-flutter/lib/assets/libspine_flutter.wasm


+ 0 - 4
spine-flutter/lib/spine_flutter.dart

@@ -807,7 +807,6 @@ class Bone {
   Vec2 worldToLocal(double worldX, double worldY) {
     final local = _bindings.spine_bone_world_to_local(_bone, worldX, worldY);
     final result = Vec2(_bindings.spine_vector_get_x(local), _bindings.spine_vector_get_y(local));
-    _allocator.free(local);
     return result;
   }
 
@@ -815,7 +814,6 @@ class Bone {
   Vec2 localToWorld(double localX, double localY) {
     final world = _bindings.spine_bone_local_to_world(_bone, localX, localY);
     final result = Vec2(_bindings.spine_vector_get_x(world), _bindings.spine_vector_get_y(world));
-    _allocator.free(world);
     return result;
   }
 
@@ -1871,7 +1869,6 @@ class PointAttachment extends Attachment<spine_point_attachment> {
   Vec2 computeWorldPosition(Bone bone) {
     final position = _bindings.spine_point_attachment_compute_world_position(_attachment, bone._bone);
     final result = Vec2(_bindings.spine_vector_get_x(position), _bindings.spine_vector_get_y(position));
-    _allocator.free(position);
     return result;
   }
 
@@ -2888,7 +2885,6 @@ class Skeleton {
     final nativeBounds = _bindings.spine_skeleton_get_bounds(_skeleton);
     final bounds = Bounds(_bindings.spine_bounds_get_x(nativeBounds), _bindings.spine_bounds_get_y(nativeBounds),
         _bindings.spine_bounds_get_width(nativeBounds), _bindings.spine_bounds_get_height(nativeBounds));
-    _allocator.free(nativeBounds);
     return bounds;
   }
 

+ 6 - 4
spine-flutter/src/spine_flutter.cpp

@@ -1473,8 +1473,9 @@ spine_path_constraint spine_skeleton_find_path_constraint(spine_skeleton skeleto
 	return (spine_path_constraint) _skeleton->findPathConstraint(constraintName);
 }
 
+_spine_bounds tmp_bounds;
 spine_bounds spine_skeleton_get_bounds(spine_skeleton skeleton) {
-	_spine_bounds *bounds = (_spine_bounds *) malloc(sizeof(_spine_bounds));
+	_spine_bounds *bounds = &tmp_bounds;
 	if (skeleton == nullptr) return (spine_bounds) bounds;
 	Skeleton *_skeleton = (Skeleton *) skeleton;
 	Vector<float> vertices;
@@ -2128,8 +2129,9 @@ void spine_bone_set_to_setup_pose(spine_bone bone) {
 	_bone->setToSetupPose();
 }
 
+_spine_vector tmp_vector;
 spine_vector spine_bone_world_to_local(spine_bone bone, float worldX, float worldY) {
-	_spine_vector *coords = SpineExtension::calloc<_spine_vector>(1, __FILE__, __LINE__);
+	_spine_vector *coords = &tmp_vector;
 	if (bone == nullptr) return (spine_vector) coords;
 	Bone *_bone = (Bone *) bone;
 	_bone->worldToLocal(worldX, worldY, coords->x, coords->y);
@@ -2137,7 +2139,7 @@ spine_vector spine_bone_world_to_local(spine_bone bone, float worldX, float worl
 }
 
 spine_vector spine_bone_local_to_world(spine_bone bone, float localX, float localY) {
-	_spine_vector *coords = SpineExtension::calloc<_spine_vector>(1, __FILE__, __LINE__);
+	_spine_vector *coords = &tmp_vector;
 	if (bone == nullptr) return (spine_vector) coords;
 	Bone *_bone = (Bone *) bone;
 	_bone->localToWorld(localX, localY, coords->x, coords->y);
@@ -2521,7 +2523,7 @@ void spine_attachment_dispose(spine_attachment attachment) {
 
 // PointAttachment
 spine_vector spine_point_attachment_compute_world_position(spine_point_attachment attachment, spine_bone bone) {
-	_spine_vector *result = SpineExtension::calloc<_spine_vector>(1, __FILE__, __LINE__);
+	_spine_vector *result = &tmp_vector;
 	if (attachment == nullptr) return (spine_vector) result;
 	PointAttachment *_attachment = (PointAttachment *) attachment;
 	_attachment->computeWorldPosition(*(Bone *) bone, result->x, result->y);