[flutter] Wrap RegionAttachment.

This commit is contained in:
Mario Zechner 2022-09-06 10:24:10 +02:00
parent 2d70bc7349
commit 44c589e591
4 changed files with 715 additions and 1 deletions

View File

@ -957,6 +957,20 @@ class Slot {
}
}
// FIXME
class TextureRegion {
final spine_texture_region _region;
TextureRegion._(this._region);
}
// FIXME
class Sequence {
final spine_sequence _sequence;
Sequence._(this._sequence);
}
enum AttachmentType {
Region(0),
Mesh(1),
@ -1011,9 +1025,110 @@ abstract class Attachment {
}
}
// FIXME
class RegionAttachment extends Attachment {
RegionAttachment._(spine_attachment attachment): super._(attachment);
List<double> computeWorldVertices(Slot slot) {
Pointer<Float> vertices = malloc.allocate(4 * 9).cast();
_bindings.spine_region_attachment_compute_world_vertices(_attachment, slot._slot, vertices);
final result = vertices.asTypedList(8).toList();
malloc.free(vertices);
return result;
}
double getX() {
return _bindings.spine_region_attachment_get_x(_attachment);
}
void setX(double x) {
_bindings.spine_region_attachment_set_x(_attachment, x);
}
double getY() {
return _bindings.spine_region_attachment_get_y(_attachment);
}
void setY(double y) {
_bindings.spine_region_attachment_set_y(_attachment, y);
}
double getRotation() {
return _bindings.spine_region_attachment_get_rotation(_attachment);
}
void setRotation(double rotation) {
_bindings.spine_region_attachment_set_rotation(_attachment, rotation);
}
double getScaleX() {
return _bindings.spine_region_attachment_get_scale_x(_attachment);
}
void setScaleX(double scaleX) {
_bindings.spine_region_attachment_set_scale_x(_attachment, scaleX);
}
double getScaleY() {
return _bindings.spine_region_attachment_get_scale_y(_attachment);
}
void setScaleY(double scaleY) {
_bindings.spine_region_attachment_set_scale_x(_attachment, scaleY);
}
double getWidth() {
return _bindings.spine_region_attachment_get_width(_attachment);
}
void setWidth(double width) {
_bindings.spine_region_attachment_set_width(_attachment, width);
}
double getHeight() {
return _bindings.spine_region_attachment_get_height(_attachment);
}
void setHeight(double height) {
_bindings.spine_region_attachment_set_height(_attachment, height);
}
Color getColor() {
final color = _bindings.spine_region_attachment_get_color(_attachment);
return Color(color.r, color.g, color.b, color.a);
}
void setColor(double r, double g, double b, double a) {
_bindings.spine_region_attachment_set_color(_attachment, r, g, b, a);
}
String getPath() {
Pointer<Utf8> path = _bindings.spine_region_attachment_get_path(_attachment).cast();
return path.toDartString();
}
TextureRegion? getRegion() {
final region = _bindings.spine_region_attachment_get_region(_attachment);
if (region.address == nullptr.address) return null;
return TextureRegion._(region);
}
Sequence? getSequence() {
final sequence = _bindings.spine_region_attachment_get_sequence(_attachment);
if (sequence.address == nullptr.address) return null;
return Sequence._(sequence);
}
Float32List getOffset() {
final num = _bindings.spine_region_attachment_get_num_offset(_attachment);
final offset = _bindings.spine_region_attachment_get_offset(_attachment);
return offset.asTypedList(num);
}
Float32List getUVs() {
final num = _bindings.spine_region_attachment_get_num_uvs(_attachment);
final offset = _bindings.spine_region_attachment_get_uvs(_attachment);
return offset.asTypedList(num);
}
}
class VertexAttachment extends Attachment {

View File

@ -4780,6 +4780,419 @@ class SpineFlutterBindings {
void Function(
spine_point_attachment, double, double, double, double)>();
void spine_region_attachment_update_region(
spine_region_attachment attachment,
) {
return _spine_region_attachment_update_region(
attachment,
);
}
late final _spine_region_attachment_update_regionPtr =
_lookup<ffi.NativeFunction<ffi.Void Function(spine_region_attachment)>>(
'spine_region_attachment_update_region');
late final _spine_region_attachment_update_region =
_spine_region_attachment_update_regionPtr
.asFunction<void Function(spine_region_attachment)>();
void spine_region_attachment_compute_world_vertices(
spine_region_attachment attachment,
spine_slot slot,
ffi.Pointer<ffi.Float> worldVertices,
) {
return _spine_region_attachment_compute_world_vertices(
attachment,
slot,
worldVertices,
);
}
late final _spine_region_attachment_compute_world_verticesPtr = _lookup<
ffi.NativeFunction<
ffi.Void Function(spine_region_attachment, spine_slot,
ffi.Pointer<ffi.Float>)>>(
'spine_region_attachment_compute_world_vertices');
late final _spine_region_attachment_compute_world_vertices =
_spine_region_attachment_compute_world_verticesPtr.asFunction<
void Function(
spine_region_attachment, spine_slot, ffi.Pointer<ffi.Float>)>();
double spine_region_attachment_get_x(
spine_region_attachment attachment,
) {
return _spine_region_attachment_get_x(
attachment,
);
}
late final _spine_region_attachment_get_xPtr =
_lookup<ffi.NativeFunction<ffi.Float Function(spine_region_attachment)>>(
'spine_region_attachment_get_x');
late final _spine_region_attachment_get_x = _spine_region_attachment_get_xPtr
.asFunction<double Function(spine_region_attachment)>();
void spine_region_attachment_set_x(
spine_region_attachment attachment,
double x,
) {
return _spine_region_attachment_set_x(
attachment,
x,
);
}
late final _spine_region_attachment_set_xPtr = _lookup<
ffi.NativeFunction<
ffi.Void Function(spine_region_attachment,
ffi.Float)>>('spine_region_attachment_set_x');
late final _spine_region_attachment_set_x = _spine_region_attachment_set_xPtr
.asFunction<void Function(spine_region_attachment, double)>();
double spine_region_attachment_get_y(
spine_region_attachment attachment,
) {
return _spine_region_attachment_get_y(
attachment,
);
}
late final _spine_region_attachment_get_yPtr =
_lookup<ffi.NativeFunction<ffi.Float Function(spine_region_attachment)>>(
'spine_region_attachment_get_y');
late final _spine_region_attachment_get_y = _spine_region_attachment_get_yPtr
.asFunction<double Function(spine_region_attachment)>();
void spine_region_attachment_set_y(
spine_region_attachment attachment,
double y,
) {
return _spine_region_attachment_set_y(
attachment,
y,
);
}
late final _spine_region_attachment_set_yPtr = _lookup<
ffi.NativeFunction<
ffi.Void Function(spine_region_attachment,
ffi.Float)>>('spine_region_attachment_set_y');
late final _spine_region_attachment_set_y = _spine_region_attachment_set_yPtr
.asFunction<void Function(spine_region_attachment, double)>();
double spine_region_attachment_get_rotation(
spine_region_attachment attachment,
) {
return _spine_region_attachment_get_rotation(
attachment,
);
}
late final _spine_region_attachment_get_rotationPtr =
_lookup<ffi.NativeFunction<ffi.Float Function(spine_region_attachment)>>(
'spine_region_attachment_get_rotation');
late final _spine_region_attachment_get_rotation =
_spine_region_attachment_get_rotationPtr
.asFunction<double Function(spine_region_attachment)>();
void spine_region_attachment_set_rotation(
spine_region_attachment attachment,
double rotation,
) {
return _spine_region_attachment_set_rotation(
attachment,
rotation,
);
}
late final _spine_region_attachment_set_rotationPtr = _lookup<
ffi.NativeFunction<
ffi.Void Function(spine_region_attachment,
ffi.Float)>>('spine_region_attachment_set_rotation');
late final _spine_region_attachment_set_rotation =
_spine_region_attachment_set_rotationPtr
.asFunction<void Function(spine_region_attachment, double)>();
double spine_region_attachment_get_scale_x(
spine_region_attachment attachment,
) {
return _spine_region_attachment_get_scale_x(
attachment,
);
}
late final _spine_region_attachment_get_scale_xPtr =
_lookup<ffi.NativeFunction<ffi.Float Function(spine_region_attachment)>>(
'spine_region_attachment_get_scale_x');
late final _spine_region_attachment_get_scale_x =
_spine_region_attachment_get_scale_xPtr
.asFunction<double Function(spine_region_attachment)>();
void spine_region_attachment_set_scale_x(
spine_region_attachment attachment,
double scaleX,
) {
return _spine_region_attachment_set_scale_x(
attachment,
scaleX,
);
}
late final _spine_region_attachment_set_scale_xPtr = _lookup<
ffi.NativeFunction<
ffi.Void Function(spine_region_attachment,
ffi.Float)>>('spine_region_attachment_set_scale_x');
late final _spine_region_attachment_set_scale_x =
_spine_region_attachment_set_scale_xPtr
.asFunction<void Function(spine_region_attachment, double)>();
double spine_region_attachment_get_scale_y(
spine_region_attachment attachment,
) {
return _spine_region_attachment_get_scale_y(
attachment,
);
}
late final _spine_region_attachment_get_scale_yPtr =
_lookup<ffi.NativeFunction<ffi.Float Function(spine_region_attachment)>>(
'spine_region_attachment_get_scale_y');
late final _spine_region_attachment_get_scale_y =
_spine_region_attachment_get_scale_yPtr
.asFunction<double Function(spine_region_attachment)>();
void spine_region_attachment_set_scale_y(
spine_region_attachment attachment,
double scaleY,
) {
return _spine_region_attachment_set_scale_y(
attachment,
scaleY,
);
}
late final _spine_region_attachment_set_scale_yPtr = _lookup<
ffi.NativeFunction<
ffi.Void Function(spine_region_attachment,
ffi.Float)>>('spine_region_attachment_set_scale_y');
late final _spine_region_attachment_set_scale_y =
_spine_region_attachment_set_scale_yPtr
.asFunction<void Function(spine_region_attachment, double)>();
double spine_region_attachment_get_width(
spine_region_attachment attachment,
) {
return _spine_region_attachment_get_width(
attachment,
);
}
late final _spine_region_attachment_get_widthPtr =
_lookup<ffi.NativeFunction<ffi.Float Function(spine_region_attachment)>>(
'spine_region_attachment_get_width');
late final _spine_region_attachment_get_width =
_spine_region_attachment_get_widthPtr
.asFunction<double Function(spine_region_attachment)>();
void spine_region_attachment_set_width(
spine_region_attachment attachment,
double width,
) {
return _spine_region_attachment_set_width(
attachment,
width,
);
}
late final _spine_region_attachment_set_widthPtr = _lookup<
ffi.NativeFunction<
ffi.Void Function(spine_region_attachment,
ffi.Float)>>('spine_region_attachment_set_width');
late final _spine_region_attachment_set_width =
_spine_region_attachment_set_widthPtr
.asFunction<void Function(spine_region_attachment, double)>();
double spine_region_attachment_get_height(
spine_region_attachment attachment,
) {
return _spine_region_attachment_get_height(
attachment,
);
}
late final _spine_region_attachment_get_heightPtr =
_lookup<ffi.NativeFunction<ffi.Float Function(spine_region_attachment)>>(
'spine_region_attachment_get_height');
late final _spine_region_attachment_get_height =
_spine_region_attachment_get_heightPtr
.asFunction<double Function(spine_region_attachment)>();
void spine_region_attachment_set_height(
spine_region_attachment attachment,
double height,
) {
return _spine_region_attachment_set_height(
attachment,
height,
);
}
late final _spine_region_attachment_set_heightPtr = _lookup<
ffi.NativeFunction<
ffi.Void Function(spine_region_attachment,
ffi.Float)>>('spine_region_attachment_set_height');
late final _spine_region_attachment_set_height =
_spine_region_attachment_set_heightPtr
.asFunction<void Function(spine_region_attachment, double)>();
spine_color spine_region_attachment_get_color(
spine_region_attachment attachment,
) {
return _spine_region_attachment_get_color(
attachment,
);
}
late final _spine_region_attachment_get_colorPtr = _lookup<
ffi.NativeFunction<spine_color Function(spine_region_attachment)>>(
'spine_region_attachment_get_color');
late final _spine_region_attachment_get_color =
_spine_region_attachment_get_colorPtr
.asFunction<spine_color Function(spine_region_attachment)>();
void spine_region_attachment_set_color(
spine_region_attachment attachment,
double r,
double g,
double b,
double a,
) {
return _spine_region_attachment_set_color(
attachment,
r,
g,
b,
a,
);
}
late final _spine_region_attachment_set_colorPtr = _lookup<
ffi.NativeFunction<
ffi.Void Function(spine_region_attachment, ffi.Float, ffi.Float,
ffi.Float, ffi.Float)>>('spine_region_attachment_set_color');
late final _spine_region_attachment_set_color =
_spine_region_attachment_set_colorPtr.asFunction<
void Function(
spine_region_attachment, double, double, double, double)>();
ffi.Pointer<ffi.Int8> spine_region_attachment_get_path(
spine_region_attachment attachment,
) {
return _spine_region_attachment_get_path(
attachment,
);
}
late final _spine_region_attachment_get_pathPtr = _lookup<
ffi.NativeFunction<
ffi.Pointer<ffi.Int8> Function(
spine_region_attachment)>>('spine_region_attachment_get_path');
late final _spine_region_attachment_get_path =
_spine_region_attachment_get_pathPtr.asFunction<
ffi.Pointer<ffi.Int8> Function(spine_region_attachment)>();
spine_texture_region spine_region_attachment_get_region(
spine_region_attachment attachment,
) {
return _spine_region_attachment_get_region(
attachment,
);
}
late final _spine_region_attachment_get_regionPtr = _lookup<
ffi.NativeFunction<
spine_texture_region Function(
spine_region_attachment)>>('spine_region_attachment_get_region');
late final _spine_region_attachment_get_region =
_spine_region_attachment_get_regionPtr
.asFunction<spine_texture_region Function(spine_region_attachment)>();
spine_sequence spine_region_attachment_get_sequence(
spine_region_attachment attachment,
) {
return _spine_region_attachment_get_sequence(
attachment,
);
}
late final _spine_region_attachment_get_sequencePtr = _lookup<
ffi.NativeFunction<spine_sequence Function(spine_region_attachment)>>(
'spine_region_attachment_get_sequence');
late final _spine_region_attachment_get_sequence =
_spine_region_attachment_get_sequencePtr
.asFunction<spine_sequence Function(spine_region_attachment)>();
int spine_region_attachment_get_num_offset(
spine_region_attachment attachment,
) {
return _spine_region_attachment_get_num_offset(
attachment,
);
}
late final _spine_region_attachment_get_num_offsetPtr =
_lookup<ffi.NativeFunction<ffi.Int32 Function(spine_region_attachment)>>(
'spine_region_attachment_get_num_offset');
late final _spine_region_attachment_get_num_offset =
_spine_region_attachment_get_num_offsetPtr
.asFunction<int Function(spine_region_attachment)>();
ffi.Pointer<ffi.Float> spine_region_attachment_get_offset(
spine_region_attachment attachment,
) {
return _spine_region_attachment_get_offset(
attachment,
);
}
late final _spine_region_attachment_get_offsetPtr = _lookup<
ffi.NativeFunction<
ffi.Pointer<ffi.Float> Function(
spine_region_attachment)>>('spine_region_attachment_get_offset');
late final _spine_region_attachment_get_offset =
_spine_region_attachment_get_offsetPtr.asFunction<
ffi.Pointer<ffi.Float> Function(spine_region_attachment)>();
int spine_region_attachment_get_num_uvs(
spine_region_attachment attachment,
) {
return _spine_region_attachment_get_num_uvs(
attachment,
);
}
late final _spine_region_attachment_get_num_uvsPtr =
_lookup<ffi.NativeFunction<ffi.Int32 Function(spine_region_attachment)>>(
'spine_region_attachment_get_num_uvs');
late final _spine_region_attachment_get_num_uvs =
_spine_region_attachment_get_num_uvsPtr
.asFunction<int Function(spine_region_attachment)>();
ffi.Pointer<ffi.Float> spine_region_attachment_get_uvs(
spine_region_attachment attachment,
) {
return _spine_region_attachment_get_uvs(
attachment,
);
}
late final _spine_region_attachment_get_uvsPtr = _lookup<
ffi.NativeFunction<
ffi.Pointer<ffi.Float> Function(
spine_region_attachment)>>('spine_region_attachment_get_uvs');
late final _spine_region_attachment_get_uvs =
_spine_region_attachment_get_uvsPtr.asFunction<
ffi.Pointer<ffi.Float> Function(spine_region_attachment)>();
void spine_skin_set_attachment(
spine_skin skin,
int slotIndex,
@ -7319,4 +7732,7 @@ typedef spine_ik_constraint = ffi.Pointer<ffi.Void>;
typedef spine_transform_constraint = ffi.Pointer<ffi.Void>;
typedef spine_path_constraint = ffi.Pointer<ffi.Void>;
typedef spine_point_attachment = ffi.Pointer<ffi.Void>;
typedef spine_region_attachment = ffi.Pointer<ffi.Void>;
typedef spine_texture_region = ffi.Pointer<ffi.Void>;
typedef spine_sequence = ffi.Pointer<ffi.Void>;
typedef spine_constraint_data = ffi.Pointer<ffi.Void>;

View File

@ -1999,6 +1999,7 @@ FFI_PLUGIN_EXPORT void spine_attachment_dispose(spine_attachment attachment) {
delete _attachment;
}
// PointAttachment
FFI_PLUGIN_EXPORT spine_vector spine_point_attachment_compute_world_position(spine_point_attachment attachment, spine_bone bone) {
spine_vector result = { 0, 0 };
if (attachment == nullptr) return result;
@ -2064,6 +2065,160 @@ FFI_PLUGIN_EXPORT void spine_point_attachment_set_color(spine_point_attachment a
_attachment->getColor().set(r, g, b, a);
}
// RegionAttachment
FFI_PLUGIN_EXPORT void spine_region_attachment_update_region(spine_region_attachment attachment) {
if (attachment == nullptr) return;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
_attachment->updateRegion();
}
FFI_PLUGIN_EXPORT void spine_region_attachment_compute_world_vertices(spine_region_attachment attachment, spine_slot slot, float *worldVertices) {
if (attachment == nullptr) return;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
_attachment->computeWorldVertices(*(Slot*)slot, worldVertices, 0);
}
FFI_PLUGIN_EXPORT float spine_region_attachment_get_x(spine_region_attachment attachment) {
if (attachment == nullptr) return 0;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
return _attachment->getX();
}
FFI_PLUGIN_EXPORT void spine_region_attachment_set_x(spine_region_attachment attachment, float x) {
if (attachment == nullptr) return;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
_attachment->setX(x);
}
FFI_PLUGIN_EXPORT float spine_region_attachment_get_y(spine_region_attachment attachment) {
if (attachment == nullptr) return 0;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
return _attachment->getY();
}
FFI_PLUGIN_EXPORT void spine_region_attachment_set_y(spine_region_attachment attachment, float y) {
if (attachment == nullptr) return;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
_attachment->setY(y);
}
FFI_PLUGIN_EXPORT float spine_region_attachment_get_rotation(spine_region_attachment attachment) {
if (attachment == nullptr) return 0;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
return _attachment->getRotation();
}
FFI_PLUGIN_EXPORT void spine_region_attachment_set_rotation(spine_region_attachment attachment, float rotation) {
if (attachment == nullptr) return;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
_attachment->setRotation(rotation);
}
FFI_PLUGIN_EXPORT float spine_region_attachment_get_scale_x(spine_region_attachment attachment) {
if (attachment == nullptr) return 0;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
return _attachment->getScaleX();
}
FFI_PLUGIN_EXPORT void spine_region_attachment_set_scale_x(spine_region_attachment attachment, float scaleX) {
if (attachment == nullptr) return;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
_attachment->setScaleX(scaleX);
}
FFI_PLUGIN_EXPORT float spine_region_attachment_get_scale_y(spine_region_attachment attachment) {
if (attachment == nullptr) return 0;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
return _attachment->getScaleY();
}
FFI_PLUGIN_EXPORT void spine_region_attachment_set_scale_y(spine_region_attachment attachment, float scaleY) {
if (attachment == nullptr) return;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
_attachment->setScaleY(scaleY);
}
FFI_PLUGIN_EXPORT float spine_region_attachment_get_width(spine_region_attachment attachment) {
if (attachment == nullptr) return 0;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
return _attachment->getWidth();
}
FFI_PLUGIN_EXPORT void spine_region_attachment_set_width(spine_region_attachment attachment, float width) {
if (attachment == nullptr) return;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
_attachment->setWidth(width);
}
FFI_PLUGIN_EXPORT float spine_region_attachment_get_height(spine_region_attachment attachment) {
if (attachment == nullptr) return 0;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
return _attachment->getHeight();
}
FFI_PLUGIN_EXPORT void spine_region_attachment_set_height(spine_region_attachment attachment, float height) {
if (attachment == nullptr) return;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
_attachment->setHeight(height);
}
FFI_PLUGIN_EXPORT spine_color spine_region_attachment_get_color(spine_region_attachment attachment) {
spine_color result = { 0, 0, 0, 0 };
if (attachment == nullptr) return result;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
Color &color = _attachment->getColor();
result = { color.r, color.g, color.b, color.a };
return result;
}
FFI_PLUGIN_EXPORT void spine_region_attachment_set_color(spine_region_attachment attachment, float r, float g, float b, float a) {
if (attachment == nullptr) return;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
_attachment->getColor().set(r, g, b, a);
}
FFI_PLUGIN_EXPORT const char *spine_region_attachment_get_path(spine_region_attachment attachment) {
if (attachment == nullptr) return nullptr;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
return _attachment->getPath().buffer();
}
FFI_PLUGIN_EXPORT spine_texture_region spine_region_attachment_get_region(spine_region_attachment attachment) {
if (attachment == nullptr) return nullptr;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
return (spine_texture_region)_attachment->getRegion();
}
FFI_PLUGIN_EXPORT spine_sequence spine_region_attachment_get_sequence(spine_region_attachment attachment) {
if (attachment == nullptr) return nullptr;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
return (spine_sequence)_attachment->getSequence();
}
FFI_PLUGIN_EXPORT int spine_region_attachment_get_num_offset(spine_region_attachment attachment) {
if (attachment == nullptr) return 0;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
return (int)_attachment->getOffset().size();
}
FFI_PLUGIN_EXPORT float *spine_region_attachment_get_offset(spine_region_attachment attachment) {
if (attachment == nullptr) return nullptr;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
return _attachment->getOffset().buffer();
}
FFI_PLUGIN_EXPORT int spine_region_attachment_get_num_uvs(spine_region_attachment attachment) {
if (attachment == nullptr) return 0;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
return (int)_attachment->getUVs().size();
}
FFI_PLUGIN_EXPORT float *spine_region_attachment_get_uvs(spine_region_attachment attachment) {
if (attachment == nullptr) return nullptr;
RegionAttachment *_attachment = (RegionAttachment*)attachment;
return _attachment->getUVs().buffer();
}
// Skin
FFI_PLUGIN_EXPORT void spine_skin_set_attachment(spine_skin skin, int slotIndex, const char* name, spine_attachment attachment) {
if (skin == nullptr) return;

View File

@ -33,6 +33,8 @@ typedef void* spine_skin;
typedef void* spine_attachment;
typedef void* spine_point_attachment;
typedef void* spine_region_attachment;
typedef void* spine_texture_region;
typedef void* spine_sequence;
typedef void* spine_mesh_attachment;
typedef void* spine_clipping_attachment;
typedef void* spine_bounding_box_attachment;
@ -487,6 +489,32 @@ FFI_PLUGIN_EXPORT void spine_point_attachment_set_rotation(spine_point_attachmen
FFI_PLUGIN_EXPORT spine_color spine_point_attachment_get_color(spine_point_attachment attachment);
FFI_PLUGIN_EXPORT void spine_point_attachment_set_color(spine_point_attachment attachment, float r, float g, float b, float a);
FFI_PLUGIN_EXPORT void spine_region_attachment_update_region(spine_region_attachment attachment);
FFI_PLUGIN_EXPORT void spine_region_attachment_compute_world_vertices(spine_region_attachment attachment, spine_slot slot, float *worldVertices);
FFI_PLUGIN_EXPORT float spine_region_attachment_get_x(spine_region_attachment attachment);
FFI_PLUGIN_EXPORT void spine_region_attachment_set_x(spine_region_attachment attachment, float x);
FFI_PLUGIN_EXPORT float spine_region_attachment_get_y(spine_region_attachment attachment);
FFI_PLUGIN_EXPORT void spine_region_attachment_set_y(spine_region_attachment attachment, float y);
FFI_PLUGIN_EXPORT float spine_region_attachment_get_rotation(spine_region_attachment attachment);
FFI_PLUGIN_EXPORT void spine_region_attachment_set_rotation(spine_region_attachment attachment, float rotation);
FFI_PLUGIN_EXPORT float spine_region_attachment_get_scale_x(spine_region_attachment attachment);
FFI_PLUGIN_EXPORT void spine_region_attachment_set_scale_x(spine_region_attachment attachment, float scaleX);
FFI_PLUGIN_EXPORT float spine_region_attachment_get_scale_y(spine_region_attachment attachment);
FFI_PLUGIN_EXPORT void spine_region_attachment_set_scale_y(spine_region_attachment attachment, float scaleY);
FFI_PLUGIN_EXPORT float spine_region_attachment_get_width(spine_region_attachment attachment);
FFI_PLUGIN_EXPORT void spine_region_attachment_set_width(spine_region_attachment attachment, float width);
FFI_PLUGIN_EXPORT float spine_region_attachment_get_height(spine_region_attachment attachment);
FFI_PLUGIN_EXPORT void spine_region_attachment_set_height(spine_region_attachment attachment, float height);
FFI_PLUGIN_EXPORT spine_color spine_region_attachment_get_color(spine_region_attachment attachment);
FFI_PLUGIN_EXPORT void spine_region_attachment_set_color(spine_region_attachment attachment, float r, float g, float b, float a);
FFI_PLUGIN_EXPORT const char *spine_region_attachment_get_path(spine_region_attachment attachment);
FFI_PLUGIN_EXPORT spine_texture_region spine_region_attachment_get_region(spine_region_attachment attachment);
FFI_PLUGIN_EXPORT spine_sequence spine_region_attachment_get_sequence(spine_region_attachment attachment);
FFI_PLUGIN_EXPORT int spine_region_attachment_get_num_offset(spine_region_attachment attachment);
FFI_PLUGIN_EXPORT float *spine_region_attachment_get_offset(spine_region_attachment attachment);
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 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);