diff options
author | RĂ©mi Verschelde <remi@verschelde.fr> | 2020-12-30 15:24:32 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-30 15:24:32 +0100 |
commit | 49ff4b41b7786b29b9fab31ee5cb37d074dd93cf (patch) | |
tree | c1d46a697b37ef67aed9af2c91f535948ff32bac /servers/rendering_server.cpp | |
parent | f1cb475d9b1389bed00f252603ea7b05880c83ab (diff) | |
parent | dff1d8d7b0c6d416180f7d2027c692e39a506d84 (diff) |
Merge pull request #44769 from fire/gltf-eight-weights
Expose gltf2 eight weights.
Diffstat (limited to 'servers/rendering_server.cpp')
-rw-r--r-- | servers/rendering_server.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/servers/rendering_server.cpp b/servers/rendering_server.cpp index e9bfb7ecf5..f5e4a187df 100644 --- a/servers/rendering_server.cpp +++ b/servers/rendering_server.cpp @@ -865,8 +865,22 @@ Error RenderingServer::mesh_create_surface_data_from_arrays(SurfaceData *r_surfa ERR_FAIL_V(ERR_INVALID_DATA); } break; } - ERR_FAIL_COND_V(array_len == 0, ERR_INVALID_DATA); + } else if (i == RS::ARRAY_BONES) { + switch (p_arrays[i].get_type()) { + case Variant::PACKED_INT32_ARRAY: { + Vector<Vector3> vertexes = p_arrays[RS::ARRAY_VERTEX]; + Vector<int32_t> bones = p_arrays[i]; + int32_t bone_8_group_count = bones.size() / (ARRAY_WEIGHTS_SIZE * 2); + int32_t vertex_count = vertexes.size(); + if (vertex_count == bone_8_group_count) { + format |= RS::ARRAY_FLAG_USE_8_BONE_WEIGHTS; + } + } break; + default: { + ERR_FAIL_V(ERR_INVALID_DATA); + } break; + } } else if (i == RS::ARRAY_INDEX) { index_array_len = PackedInt32Array(p_arrays[i]).size(); } |