mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-21 01:36:02 +08:00
Merge branch '4.1' into 4.2-beta
This commit is contained in:
commit
961a865343
242
spine-godot/.vscode/launch.json
vendored
242
spine-godot/.vscode/launch.json
vendored
@ -1,133 +1,113 @@
|
|||||||
{
|
{
|
||||||
// Use IntelliSense to learn about possible attributes.
|
// Use IntelliSense to learn about possible attributes.
|
||||||
// Hover to view descriptions of existing attributes.
|
// Hover to view descriptions of existing attributes.
|
||||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"configurations": [
|
"configurations": [
|
||||||
{
|
{
|
||||||
"type": "cppvsdbg",
|
"type": "cppvsdbg",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"name": "debug scene v4",
|
"name": "debug scene v4",
|
||||||
"program": "godot/bin/godot.windows.editor.dev.x86_64.exe",
|
"program": "godot/bin/godot.windows.editor.dev.x86_64.exe",
|
||||||
"args": [
|
"args": ["--path", "example-v4", "examples/07-slot-node/slot-node.tscn"],
|
||||||
"--path",
|
"cwd": "${workspaceFolder}",
|
||||||
"example-v4",
|
"preLaunchTask": "build-v4",
|
||||||
"examples/01-helloworld/helloworld.tscn"
|
"linux": {
|
||||||
],
|
"type": "lldb",
|
||||||
"cwd": "${workspaceFolder}",
|
"request": "launch",
|
||||||
"preLaunchTask": "build-v4",
|
"name": "debug scene v3",
|
||||||
"linux": {
|
"program": "${workspaceFolder}/godot/bin/godot.linux.editor.dev.x86_64"
|
||||||
"type": "lldb",
|
},
|
||||||
"request": "launch",
|
"osx": {
|
||||||
"name": "debug scene v3",
|
"type": "lldb",
|
||||||
"program": "${workspaceFolder}/godot/bin/godot.linux.editor.dev.x86_64",
|
"request": "launch",
|
||||||
},
|
"name": "debug scene v3",
|
||||||
"osx": {
|
"program": "${workspaceFolder}/godot/bin/godot.macos.editor.dev.arm64"
|
||||||
"type": "lldb",
|
}
|
||||||
"request": "launch",
|
},
|
||||||
"name": "debug scene v3",
|
{
|
||||||
"program": "${workspaceFolder}/godot/bin/godot.macos.editor.dev.arm64",
|
"type": "cppvsdbg",
|
||||||
},
|
"request": "launch",
|
||||||
},
|
"name": "debug editor v4",
|
||||||
{
|
"program": "godot/bin/godot.windows.editor.dev.x86_64.exe",
|
||||||
"type": "cppvsdbg",
|
"args": ["-e", "--path", "example-v4"],
|
||||||
"request": "launch",
|
"cwd": "${workspaceFolder}",
|
||||||
"name": "debug editor v4",
|
"preLaunchTask": "build-v4",
|
||||||
"program": "godot/bin/godot.windows.editor.dev.x86_64.exe",
|
"linux": {
|
||||||
"args": [
|
"type": "lldb",
|
||||||
"-e",
|
"request": "launch",
|
||||||
"--path",
|
"name": "debug scene v3",
|
||||||
"example-v4",
|
"program": "${workspaceFolder}/godot/bin/godot.linux.editor.dev.x86_64"
|
||||||
],
|
},
|
||||||
"cwd": "${workspaceFolder}",
|
"osx": {
|
||||||
"preLaunchTask": "build-v4",
|
"type": "lldb",
|
||||||
"linux": {
|
"request": "launch",
|
||||||
"type": "lldb",
|
"name": "debug scene v3",
|
||||||
"request": "launch",
|
"program": "${workspaceFolder}/godot/bin/godot.macos.editor.dev.arm64"
|
||||||
"name": "debug scene v3",
|
}
|
||||||
"program": "${workspaceFolder}/godot/bin/godot.linux.editor.dev.x86_64",
|
},
|
||||||
},
|
{
|
||||||
"osx": {
|
"type": "cppvsdbg",
|
||||||
"type": "lldb",
|
"request": "launch",
|
||||||
"request": "launch",
|
"name": "debug editor v4 c#",
|
||||||
"name": "debug scene v3",
|
"program": "godot/bin/godot.windows.editor.dev.x86_64.mono.exe",
|
||||||
"program": "${workspaceFolder}/godot/bin/godot.macos.editor.dev.arm64",
|
"args": ["-e", "--path", "example-v4"],
|
||||||
},
|
"cwd": "${workspaceFolder}",
|
||||||
},
|
"preLaunchTask": "build-v4",
|
||||||
{
|
"linux": {
|
||||||
"type": "cppvsdbg",
|
"type": "lldb",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"name": "debug editor v4 c#",
|
"name": "debug editor v4",
|
||||||
"program": "godot/bin/godot.windows.editor.dev.x86_64.mono.exe",
|
"program": "${workspaceFolder}/godot/bin/godot.linux.editor.dev.x86_64"
|
||||||
"args": [
|
},
|
||||||
"-e",
|
"osx": {
|
||||||
"--path",
|
"type": "lldb",
|
||||||
"example-v4",
|
"request": "launch",
|
||||||
],
|
"name": "debug editor v4",
|
||||||
"cwd": "${workspaceFolder}",
|
"program": "${workspaceFolder}/godot/bin/godot.macos.editor.dev.arm64.mono"
|
||||||
"preLaunchTask": "build-v4",
|
}
|
||||||
"linux": {
|
},
|
||||||
"type": "lldb",
|
{
|
||||||
"request": "launch",
|
"type": "cppvsdbg",
|
||||||
"name": "debug editor v4",
|
"request": "launch",
|
||||||
"program": "${workspaceFolder}/godot/bin/godot.linux.editor.dev.x86_64",
|
"name": "debug scene v3",
|
||||||
},
|
"cwd": "${workspaceFolder}",
|
||||||
"osx": {
|
"program": "${workspaceFolder}/godot/bin/godot.windows.tools.64.exe",
|
||||||
"type": "lldb",
|
"args": ["--path", "example", "examples/01-helloworld/helloworld.tscn"],
|
||||||
"request": "launch",
|
"preLaunchTask": "build-v3",
|
||||||
"name": "debug editor v4",
|
"linux": {
|
||||||
"program": "${workspaceFolder}/godot/bin/godot.macos.editor.dev.arm64.mono",
|
"type": "cppdbg",
|
||||||
},
|
"request": "launch",
|
||||||
},
|
"name": "debug scene v3",
|
||||||
{
|
"program": "${workspaceFolder}/godot/bin/godot.linux.tools.64"
|
||||||
"type": "cppvsdbg",
|
},
|
||||||
"request": "launch",
|
"osx": {
|
||||||
"name": "debug scene v3",
|
"type": "lldb",
|
||||||
"cwd": "${workspaceFolder}",
|
"request": "launch",
|
||||||
"program": "${workspaceFolder}/godot/bin/godot.windows.tools.64.exe",
|
"name": "debug scene v3",
|
||||||
"args": [
|
"program": "${workspaceFolder}/godot/bin/godot.osx.tools.64"
|
||||||
"--path",
|
}
|
||||||
"example",
|
},
|
||||||
"examples/01-helloworld/helloworld.tscn"
|
{
|
||||||
],
|
"type": "cppvsdbg",
|
||||||
"preLaunchTask": "build-v3",
|
"request": "launch",
|
||||||
"linux": {
|
"name": "debug editor v3",
|
||||||
"type": "cppdbg",
|
"program": "${workspaceFolder}/godot/bin/godot.windows.tools.64.exe",
|
||||||
"request": "launch",
|
"args": ["-e", "--path", "example"],
|
||||||
"name": "debug scene v3",
|
"cwd": "${workspaceFolder}",
|
||||||
"program": "${workspaceFolder}/godot/bin/godot.linux.tools.64",
|
"preLaunchTask": "build-v3",
|
||||||
},
|
"linux": {
|
||||||
"osx": {
|
"type": "cppdbg",
|
||||||
"type": "lldb",
|
"request": "launch",
|
||||||
"request": "launch",
|
"name": "debug editor v3",
|
||||||
"name": "debug scene v3",
|
"program": "${workspaceFolder}/godot/bin/godot.linux.tools.64"
|
||||||
"program": "${workspaceFolder}/godot/bin/godot.osx.tools.64",
|
},
|
||||||
},
|
"osx": {
|
||||||
},
|
"type": "lldb",
|
||||||
{
|
"request": "launch",
|
||||||
"type": "cppvsdbg",
|
"name": "debug editor v3",
|
||||||
"request": "launch",
|
"program": "${workspaceFolder}/godot/bin/godot.osx.tools.64"
|
||||||
"name": "debug editor v3",
|
}
|
||||||
"program": "${workspaceFolder}/godot/bin/godot.windows.tools.64.exe",
|
}
|
||||||
"args": [
|
]
|
||||||
"-e",
|
|
||||||
"--path",
|
|
||||||
"example",
|
|
||||||
],
|
|
||||||
"cwd": "${workspaceFolder}",
|
|
||||||
"preLaunchTask": "build-v3",
|
|
||||||
"linux": {
|
|
||||||
"type": "cppdbg",
|
|
||||||
"request": "launch",
|
|
||||||
"name": "debug editor v3",
|
|
||||||
"program": "${workspaceFolder}/godot/bin/godot.linux.tools.64",
|
|
||||||
},
|
|
||||||
"osx": {
|
|
||||||
"type": "lldb",
|
|
||||||
"request": "launch",
|
|
||||||
"name": "debug editor v3",
|
|
||||||
"program": "${workspaceFolder}/godot/bin/godot.osx.tools.64",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
@ -194,7 +194,8 @@ Error SpineAtlasResource::load_from_file(const String &path) {
|
|||||||
|
|
||||||
clear();
|
clear();
|
||||||
texture_loader = new GodotSpineTextureLoader(&textures, &normal_maps, normal_map_prefix);
|
texture_loader = new GodotSpineTextureLoader(&textures, &normal_maps, normal_map_prefix);
|
||||||
atlas = new spine::Atlas(atlas_data.utf8(), atlas_data.size(), source_path.get_base_dir().utf8(), texture_loader);
|
auto utf8 = atlas_data.utf8();
|
||||||
|
atlas = new spine::Atlas(utf8.ptr(), utf8.size(), source_path.get_base_dir().utf8(), texture_loader);
|
||||||
if (atlas) return OK;
|
if (atlas) return OK;
|
||||||
|
|
||||||
clear();
|
clear();
|
||||||
|
|||||||
@ -73,7 +73,7 @@ Ref<SpineSlotData> SpineSlot::get_data() {
|
|||||||
Ref<SpineBone> SpineSlot::get_bone() {
|
Ref<SpineBone> SpineSlot::get_bone() {
|
||||||
SPINE_CHECK(get_spine_object(), nullptr)
|
SPINE_CHECK(get_spine_object(), nullptr)
|
||||||
if (_bone.is_valid()) {
|
if (_bone.is_valid()) {
|
||||||
return _data;
|
return _bone;
|
||||||
} else {
|
} else {
|
||||||
auto &bone = get_spine_object()->getBone();
|
auto &bone = get_spine_object()->getBone();
|
||||||
Ref<SpineBone> bone_ref(memnew(SpineBone));
|
Ref<SpineBone> bone_ref(memnew(SpineBone));
|
||||||
|
|||||||
@ -131,7 +131,7 @@ void SpineMesh2D::update_mesh(const Vector<Point2> &vertices,
|
|||||||
const Vector<int> &indices,
|
const Vector<int> &indices,
|
||||||
SpineRendererObject *renderer_object) {
|
SpineRendererObject *renderer_object) {
|
||||||
#if VERSION_MAJOR > 3
|
#if VERSION_MAJOR > 3
|
||||||
if (!mesh.is_valid() || vertices.size() != num_vertices || indices.size() != num_indices || last_indices_id != indices_id) {
|
if (!mesh.is_valid() || vertices.size() != num_vertices || indices.size() != num_indices || indices_changed) {
|
||||||
if (mesh.is_valid()) {
|
if (mesh.is_valid()) {
|
||||||
RS::get_singleton()->free(mesh);
|
RS::get_singleton()->free(mesh);
|
||||||
}
|
}
|
||||||
@ -151,7 +151,7 @@ void SpineMesh2D::update_mesh(const Vector<Point2> &vertices,
|
|||||||
num_indices = indices.size();
|
num_indices = indices.size();
|
||||||
vertex_buffer = surface.vertex_data;
|
vertex_buffer = surface.vertex_data;
|
||||||
attribute_buffer = surface.attribute_data;
|
attribute_buffer = surface.attribute_data;
|
||||||
last_indices_id = indices_id;
|
indices_changed = false;
|
||||||
} else {
|
} else {
|
||||||
AABB aabb_new;
|
AABB aabb_new;
|
||||||
uint8_t *vertex_write_buffer = vertex_buffer.ptrw();
|
uint8_t *vertex_write_buffer = vertex_buffer.ptrw();
|
||||||
@ -183,7 +183,7 @@ void SpineMesh2D::update_mesh(const Vector<Point2> &vertices,
|
|||||||
|
|
||||||
RenderingServer::get_singleton()->canvas_item_add_mesh(this->get_canvas_item(), mesh, Transform2D(), Color(1, 1, 1, 1), renderer_object->canvas_texture->get_rid());
|
RenderingServer::get_singleton()->canvas_item_add_mesh(this->get_canvas_item(), mesh, Transform2D(), Color(1, 1, 1, 1), renderer_object->canvas_texture->get_rid());
|
||||||
#else
|
#else
|
||||||
if (!mesh.is_valid() || vertices.size() != num_vertices || indices.size() != num_indices || last_indices_id != indices_id) {
|
if (!mesh.is_valid() || vertices.size() != num_vertices || indices.size() != num_indices || indices_changed) {
|
||||||
if (mesh.is_valid()) {
|
if (mesh.is_valid()) {
|
||||||
VS::get_singleton()->free(mesh);
|
VS::get_singleton()->free(mesh);
|
||||||
}
|
}
|
||||||
@ -203,7 +203,7 @@ void SpineMesh2D::update_mesh(const Vector<Point2> &vertices,
|
|||||||
VS::get_singleton()->mesh_surface_make_offsets_from_format(mesh_surface_format, surface_vertex_len, surface_index_len, mesh_surface_offsets, mesh_stride);
|
VS::get_singleton()->mesh_surface_make_offsets_from_format(mesh_surface_format, surface_vertex_len, surface_index_len, mesh_surface_offsets, mesh_stride);
|
||||||
num_vertices = vertices.size();
|
num_vertices = vertices.size();
|
||||||
num_indices = indices.size();
|
num_indices = indices.size();
|
||||||
last_indices_id = indices_id;
|
indices_changed = false;
|
||||||
} else {
|
} else {
|
||||||
AABB aabb_new;
|
AABB aabb_new;
|
||||||
PoolVector<uint8_t>::Write write_buffer = mesh_buffer.write();
|
PoolVector<uint8_t>::Write write_buffer = mesh_buffer.write();
|
||||||
@ -769,15 +769,29 @@ void SpineSprite::update_meshes(Ref<SpineSkeleton> skeleton_ref) {
|
|||||||
for (int j = 0; j < (int) num_vertices; j++) {
|
for (int j = 0; j < (int) num_vertices; j++) {
|
||||||
mesh_instance->colors.set(j, Color(tint.r, tint.g, tint.b, tint.a));
|
mesh_instance->colors.set(j, Color(tint.r, tint.g, tint.b, tint.a));
|
||||||
}
|
}
|
||||||
mesh_instance->indices.resize((int) indices->size());
|
|
||||||
for (int j = 0; j < (int) indices->size(); ++j) {
|
auto indices_changed = true;
|
||||||
mesh_instance->indices.set(j, indices->buffer()[j]);
|
if (mesh_instance->indices.size() == indices->size()) {
|
||||||
|
auto old_indices = mesh_instance->indices.ptr();
|
||||||
|
auto new_indices = indices->buffer();
|
||||||
|
for (int j = 0; j < (int) indices->size(); j++) {
|
||||||
|
if (old_indices[j] != new_indices[j]) {
|
||||||
|
indices_changed = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (indices_changed) {
|
||||||
|
mesh_instance->indices.resize((int) indices->size());
|
||||||
|
for (int j = 0; j < (int) indices->size(); ++j) {
|
||||||
|
mesh_instance->indices.set(j, indices->buffer()[j]);
|
||||||
|
}
|
||||||
|
mesh_instance->indices_changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
mesh_instance->renderer_object = renderer_object;
|
mesh_instance->renderer_object = renderer_object;
|
||||||
#if VERSION_MAJOR > 3
|
|
||||||
mesh_instance->indices_id = (uint64_t) indices;
|
|
||||||
#endif
|
|
||||||
spine::BlendMode blend_mode = slot->getData().getBlendMode();
|
spine::BlendMode blend_mode = slot->getData().getBlendMode();
|
||||||
Ref<Material> custom_material;
|
Ref<Material> custom_material;
|
||||||
|
|
||||||
|
|||||||
@ -56,9 +56,9 @@ protected:
|
|||||||
Vector<int> indices;
|
Vector<int> indices;
|
||||||
SpineRendererObject *renderer_object;
|
SpineRendererObject *renderer_object;
|
||||||
|
|
||||||
|
bool indices_changed;
|
||||||
|
|
||||||
#if VERSION_MAJOR > 3
|
#if VERSION_MAJOR > 3
|
||||||
uint64_t last_indices_id;
|
|
||||||
uint64_t indices_id;
|
|
||||||
RID mesh;
|
RID mesh;
|
||||||
uint32_t surface_offsets[RS::ARRAY_MAX];
|
uint32_t surface_offsets[RS::ARRAY_MAX];
|
||||||
int num_vertices;
|
int num_vertices;
|
||||||
@ -68,8 +68,6 @@ protected:
|
|||||||
uint32_t vertex_stride;
|
uint32_t vertex_stride;
|
||||||
uint32_t attribute_stride;
|
uint32_t attribute_stride;
|
||||||
#else
|
#else
|
||||||
uint64_t last_indices_id;
|
|
||||||
uint64_t indices_id;
|
|
||||||
RID mesh;
|
RID mesh;
|
||||||
uint32_t surface_offsets[VS::ARRAY_MAX];
|
uint32_t surface_offsets[VS::ARRAY_MAX];
|
||||||
int num_vertices;
|
int num_vertices;
|
||||||
@ -82,14 +80,14 @@ protected:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
#if VERSION_MAJOR > 3
|
#if VERSION_MAJOR > 3
|
||||||
SpineMesh2D() : renderer_object(nullptr), last_indices_id(0), indices_id(0), num_vertices(0), num_indices(0), vertex_stride(0), attribute_stride(0){};
|
SpineMesh2D() : renderer_object(nullptr), indices_changed(true), num_vertices(0), num_indices(0), vertex_stride(0), attribute_stride(0){};
|
||||||
~SpineMesh2D() {
|
~SpineMesh2D() {
|
||||||
if (mesh.is_valid()) {
|
if (mesh.is_valid()) {
|
||||||
RS::get_singleton()->free(mesh);
|
RS::get_singleton()->free(mesh);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
SpineMesh2D() : renderer_object(nullptr), last_indices_id(0), indices_id(0), num_vertices(0), num_indices(0){};
|
SpineMesh2D() : renderer_object(nullptr), indices_changed(true), num_vertices(0), num_indices(0){};
|
||||||
~SpineMesh2D() {
|
~SpineMesh2D() {
|
||||||
if (mesh.is_valid()) {
|
if (mesh.is_valid()) {
|
||||||
VS::get_singleton()->free(mesh);
|
VS::get_singleton()->free(mesh);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user