diff --git a/spine-cpp/spine-cpp/include/spine/SkeletonBinary.h b/spine-cpp/spine-cpp/include/spine/SkeletonBinary.h index e5078f1be..abdc05f97 100644 --- a/spine-cpp/spine-cpp/include/spine/SkeletonBinary.h +++ b/spine-cpp/spine-cpp/include/spine/SkeletonBinary.h @@ -147,7 +147,7 @@ namespace spine { Attachment *readAttachment(DataInput *input, Skin *skin, int slotIndex, const String &attachmentName, SkeletonData *skeletonData, bool nonessential); - void readVertices(DataInput *input, Vector &vertices, Vector &bones, int vertexCount); + void readVertices(DataInput *input, Vector &vertices, Vector &bones, int vertexCount); void readFloatArray(DataInput *input, int n, float scale, Vector &array); diff --git a/spine-cpp/spine-cpp/include/spine/VertexAttachment.h b/spine-cpp/spine-cpp/include/spine/VertexAttachment.h index 51532c3cf..5a9ddd932 100644 --- a/spine-cpp/spine-cpp/include/spine/VertexAttachment.h +++ b/spine-cpp/spine-cpp/include/spine/VertexAttachment.h @@ -71,7 +71,7 @@ namespace spine { /// Gets a unique ID for this attachment. int getId(); - Vector &getBones(); + Vector &getBones(); Vector &getVertices(); @@ -86,7 +86,7 @@ namespace spine { void copyTo(VertexAttachment *other); protected: - Vector _bones; + Vector _bones; Vector _vertices; size_t _worldVerticesLength; Attachment *_timelineAttachment; diff --git a/spine-cpp/spine-cpp/include/spine/Vertices.h b/spine-cpp/spine-cpp/include/spine/Vertices.h index b83d90329..00a9d09c3 100644 --- a/spine-cpp/spine-cpp/include/spine/Vertices.h +++ b/spine-cpp/spine-cpp/include/spine/Vertices.h @@ -35,7 +35,7 @@ namespace spine { class SP_API Vertices : public SpineObject { public: - Vector _bones; + Vector _bones; Vector _vertices; }; } diff --git a/spine-cpp/spine-cpp/src/spine/Skeleton.cpp b/spine-cpp/spine-cpp/src/spine/Skeleton.cpp index 5488eee37..f623b54a6 100644 --- a/spine-cpp/spine-cpp/src/spine/Skeleton.cpp +++ b/spine-cpp/spine-cpp/src/spine/Skeleton.cpp @@ -653,7 +653,7 @@ void Skeleton::sortPathConstraintAttachment(Skin *skin, size_t slotIndex, Bone & void Skeleton::sortPathConstraintAttachment(Attachment *attachment, Bone &slotBone) { if (attachment == NULL || !attachment->getRTTI().instanceOf(PathAttachment::rtti)) return; - Vector &pathBones = static_cast(attachment)->getBones(); + Vector &pathBones = static_cast(attachment)->getBones(); if (pathBones.size() == 0) sortBone(&slotBone); else { diff --git a/spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp b/spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp index e5b4b4150..ac645e1cb 100644 --- a/spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp +++ b/spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp @@ -564,7 +564,7 @@ Attachment *SkeletonBinary::readAttachment(DataInput *input, Skin *skin, int slo Vector uvs; Vector triangles; Vector vertices; - Vector bones; + Vector bones; int hullLength; Sequence *sequence; float width = 0; @@ -702,7 +702,7 @@ Attachment *SkeletonBinary::readAttachment(DataInput *input, Skin *skin, int slo return NULL; } -void SkeletonBinary::readVertices(DataInput *input, Vector &vertices, Vector &bones, int vertexCount) { +void SkeletonBinary::readVertices(DataInput *input, Vector &vertices, Vector &bones, int vertexCount) { float scale = _scale; int verticesLength = vertexCount << 1; diff --git a/spine-cpp/spine-cpp/src/spine/VertexAttachment.cpp b/spine-cpp/spine-cpp/src/spine/VertexAttachment.cpp index 7141b6cf8..1f8208057 100644 --- a/spine-cpp/spine-cpp/src/spine/VertexAttachment.cpp +++ b/spine-cpp/spine-cpp/src/spine/VertexAttachment.cpp @@ -64,7 +64,7 @@ void VertexAttachment::computeWorldVertices(Slot &slot, size_t start, size_t cou Skeleton &skeleton = slot._bone._skeleton; Vector *deformArray = &slot.getDeform(); Vector *vertices = &_vertices; - Vector &bones = _bones; + Vector &bones = _bones; if (bones.size() == 0) { if (deformArray->size() > 0) vertices = deformArray; @@ -130,7 +130,7 @@ int VertexAttachment::getId() { return _id; } -Vector &VertexAttachment::getBones() { +Vector &VertexAttachment::getBones() { return _bones; } diff --git a/spine-flutter/lib/spine_flutter_bindings_generated.dart b/spine-flutter/lib/spine_flutter_bindings_generated.dart index 512a359bf..5f6b6cdd1 100644 --- a/spine-flutter/lib/spine_flutter_bindings_generated.dart +++ b/spine-flutter/lib/spine_flutter_bindings_generated.dart @@ -5193,6 +5193,136 @@ class SpineFlutterBindings { _spine_region_attachment_get_uvsPtr.asFunction< ffi.Pointer Function(spine_region_attachment)>(); + int spine_vertex_attachment_get_world_vertices_length( + spine_vertex_attachment attachment, + ) { + return _spine_vertex_attachment_get_world_vertices_length( + attachment, + ); + } + + late final _spine_vertex_attachment_get_world_vertices_lengthPtr = + _lookup>( + 'spine_vertex_attachment_get_world_vertices_length'); + late final _spine_vertex_attachment_get_world_vertices_length = + _spine_vertex_attachment_get_world_vertices_lengthPtr + .asFunction(); + + void spine_vertex_attachment_compute_world_vertices( + spine_vertex_attachment attachment, + spine_slot slot, + ffi.Pointer worldVertices, + ) { + return _spine_vertex_attachment_compute_world_vertices( + attachment, + slot, + worldVertices, + ); + } + + late final _spine_vertex_attachment_compute_world_verticesPtr = _lookup< + ffi.NativeFunction< + ffi.Void Function(spine_vertex_attachment, spine_slot, + ffi.Pointer)>>( + 'spine_vertex_attachment_compute_world_vertices'); + late final _spine_vertex_attachment_compute_world_vertices = + _spine_vertex_attachment_compute_world_verticesPtr.asFunction< + void Function( + spine_vertex_attachment, spine_slot, ffi.Pointer)>(); + + int spine_vertex_attachment_get_num_bones( + spine_vertex_attachment attachment, + ) { + return _spine_vertex_attachment_get_num_bones( + attachment, + ); + } + + late final _spine_vertex_attachment_get_num_bonesPtr = + _lookup>( + 'spine_vertex_attachment_get_num_bones'); + late final _spine_vertex_attachment_get_num_bones = + _spine_vertex_attachment_get_num_bonesPtr + .asFunction(); + + ffi.Pointer spine_region_attachment_get_bones( + spine_region_attachment attachment, + ) { + return _spine_region_attachment_get_bones( + attachment, + ); + } + + late final _spine_region_attachment_get_bonesPtr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + spine_region_attachment)>>('spine_region_attachment_get_bones'); + late final _spine_region_attachment_get_bones = + _spine_region_attachment_get_bonesPtr.asFunction< + ffi.Pointer Function(spine_region_attachment)>(); + + int spine_vertex_attachment_get_num_vertices( + spine_vertex_attachment attachment, + ) { + return _spine_vertex_attachment_get_num_vertices( + attachment, + ); + } + + late final _spine_vertex_attachment_get_num_verticesPtr = + _lookup>( + 'spine_vertex_attachment_get_num_vertices'); + late final _spine_vertex_attachment_get_num_vertices = + _spine_vertex_attachment_get_num_verticesPtr + .asFunction(); + + ffi.Pointer spine_region_attachment_get_vertices( + spine_region_attachment attachment, + ) { + return _spine_region_attachment_get_vertices( + attachment, + ); + } + + late final _spine_region_attachment_get_verticesPtr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(spine_region_attachment)>>( + 'spine_region_attachment_get_vertices'); + late final _spine_region_attachment_get_vertices = + _spine_region_attachment_get_verticesPtr.asFunction< + ffi.Pointer Function(spine_region_attachment)>(); + + spine_attachment spine_vertex_attachment_get_timeline_attachment( + spine_vertex_attachment attachment, + ) { + return _spine_vertex_attachment_get_timeline_attachment( + attachment, + ); + } + + late final _spine_vertex_attachment_get_timeline_attachmentPtr = _lookup< + ffi.NativeFunction< + spine_attachment Function(spine_vertex_attachment)>>( + 'spine_vertex_attachment_get_timeline_attachment'); + late final _spine_vertex_attachment_get_timeline_attachment = + _spine_vertex_attachment_get_timeline_attachmentPtr + .asFunction(); + + void spine_vertex_attachment_set_timeline_attachment( + spine_vertex_attachment attachment, + ) { + return _spine_vertex_attachment_set_timeline_attachment( + attachment, + ); + } + + late final _spine_vertex_attachment_set_timeline_attachmentPtr = + _lookup>( + 'spine_vertex_attachment_set_timeline_attachment'); + late final _spine_vertex_attachment_set_timeline_attachment = + _spine_vertex_attachment_set_timeline_attachmentPtr + .asFunction(); + void spine_skin_set_attachment( spine_skin skin, int slotIndex, @@ -7735,4 +7865,5 @@ typedef spine_point_attachment = ffi.Pointer; typedef spine_region_attachment = ffi.Pointer; typedef spine_texture_region = ffi.Pointer; typedef spine_sequence = ffi.Pointer; +typedef spine_vertex_attachment = ffi.Pointer; typedef spine_constraint_data = ffi.Pointer; diff --git a/spine-flutter/src/spine_flutter.cpp b/spine-flutter/src/spine_flutter.cpp index 175b687ce..c61733246 100644 --- a/spine-flutter/src/spine_flutter.cpp +++ b/spine-flutter/src/spine_flutter.cpp @@ -2219,6 +2219,55 @@ FFI_PLUGIN_EXPORT float *spine_region_attachment_get_uvs(spine_region_attachment return _attachment->getUVs().buffer(); } +// VertexAttachment +FFI_PLUGIN_EXPORT int spine_vertex_attachment_get_world_vertices_length(spine_vertex_attachment attachment) { + if (attachment == nullptr) return 0; + VertexAttachment *_attachment = (VertexAttachment*)attachment; + return (int)_attachment->getWorldVerticesLength(); +} + +FFI_PLUGIN_EXPORT void spine_vertex_attachment_compute_world_vertices(spine_vertex_attachment attachment, spine_slot slot, float *worldVertices) { + if (attachment == nullptr) return; + VertexAttachment *_attachment = (VertexAttachment*)attachment; + _attachment->computeWorldVertices(*(Slot*)slot, worldVertices); +} + +FFI_PLUGIN_EXPORT int spine_vertex_attachment_get_num_bones(spine_vertex_attachment attachment) { + if (attachment == nullptr) return 0; + VertexAttachment *_attachment = (VertexAttachment*)attachment; + return (int)_attachment->getBones().size(); +} + +FFI_PLUGIN_EXPORT int *spine_region_attachment_get_bones(spine_region_attachment attachment) { + if (attachment == nullptr) return nullptr; + VertexAttachment *_attachment = (VertexAttachment*)attachment; + return _attachment->getBones().buffer(); +} + +FFI_PLUGIN_EXPORT int spine_vertex_attachment_get_num_vertices(spine_vertex_attachment attachment) { + if (attachment == nullptr) return 0; + VertexAttachment *_attachment = (VertexAttachment*)attachment; + return (int)_attachment->getVertices().size(); +} + +FFI_PLUGIN_EXPORT float *spine_region_attachment_get_vertices(spine_region_attachment attachment) { + if (attachment == nullptr) return nullptr; + VertexAttachment *_attachment = (VertexAttachment*)attachment; + return _attachment->getVertices().buffer(); +} + +FFI_PLUGIN_EXPORT spine_attachment spine_vertex_attachment_get_timeline_attachment(spine_vertex_attachment attachment) { + if (attachment == nullptr) return nullptr; + VertexAttachment *_attachment = (VertexAttachment*)attachment; + return _attachment->getTimelineAttachment(); +} + +FFI_PLUGIN_EXPORT void spine_vertex_attachment_set_timeline_attachment(spine_vertex_attachment attachment) { + if (attachment == nullptr) return; + VertexAttachment *_attachment = (VertexAttachment*)attachment; + _attachment->setTimelineAttachment((Attachment*)attachment); +} + // Skin FFI_PLUGIN_EXPORT void spine_skin_set_attachment(spine_skin skin, int slotIndex, const char* name, spine_attachment attachment) { if (skin == nullptr) return; diff --git a/spine-flutter/src/spine_flutter.h b/spine-flutter/src/spine_flutter.h index 963b847bf..490adab9f 100644 --- a/spine-flutter/src/spine_flutter.h +++ b/spine-flutter/src/spine_flutter.h @@ -31,8 +31,12 @@ typedef void* spine_slot; typedef void* spine_slot_data; typedef void* spine_skin; typedef void* spine_attachment; -typedef void* spine_point_attachment; typedef void* spine_region_attachment; +typedef void* spine_vertex_attachment; +typedef void* spine_mesh_attachment; +typedef void* spine_clipping_attachment; +typedef void* spine_path_attachment; +typedef void* spine_point_attachment; typedef void* spine_texture_region; typedef void* spine_sequence; typedef void* spine_mesh_attachment; @@ -515,6 +519,15 @@ FFI_PLUGIN_EXPORT float *spine_region_attachment_get_offset(spine_region_attachm FFI_PLUGIN_EXPORT int spine_region_attachment_get_num_uvs(spine_region_attachment attachment); FFI_PLUGIN_EXPORT float *spine_region_attachment_get_uvs(spine_region_attachment attachment); +FFI_PLUGIN_EXPORT int spine_vertex_attachment_get_world_vertices_length(spine_vertex_attachment attachment); +FFI_PLUGIN_EXPORT void spine_vertex_attachment_compute_world_vertices(spine_vertex_attachment attachment, spine_slot slot, float *worldVertices); +FFI_PLUGIN_EXPORT int spine_vertex_attachment_get_num_bones(spine_vertex_attachment attachment); +FFI_PLUGIN_EXPORT int *spine_region_attachment_get_bones(spine_region_attachment attachment); +FFI_PLUGIN_EXPORT int spine_vertex_attachment_get_num_vertices(spine_vertex_attachment attachment); +FFI_PLUGIN_EXPORT float *spine_region_attachment_get_vertices(spine_region_attachment attachment); +FFI_PLUGIN_EXPORT spine_attachment spine_vertex_attachment_get_timeline_attachment(spine_vertex_attachment attachment); +FFI_PLUGIN_EXPORT void spine_vertex_attachment_set_timeline_attachment(spine_vertex_attachment attachment); + FFI_PLUGIN_EXPORT void spine_skin_set_attachment(spine_skin skin, int slotIndex, const char* name, spine_attachment attachment); FFI_PLUGIN_EXPORT spine_attachment spine_skin_get_attachment(spine_skin skin, int slotIndex, const char* name); FFI_PLUGIN_EXPORT void spine_skin_remove_attachment(spine_skin skin, int slotIndex, const char* name);