Merge branch '4.1' into 4.2-beta

This commit is contained in:
Mario Zechner 2023-09-22 15:41:57 +02:00
commit 961a865343
5 changed files with 143 additions and 150 deletions

View File

@ -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",
},
},
]
}

View File

@ -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();

View File

@ -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));

View File

@ -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;

View File

@ -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);