Always have a name for gltf2 mesh, material and skins.
Co-authored-by: Lcbx <luc.courbariaux@gmail.com>
This commit is contained in:
parent
1829eb4608
commit
60eb3dd6ad
2 changed files with 18 additions and 4 deletions
|
@ -554,10 +554,10 @@ Error GLTFDocument::_parse_scenes(Ref<GLTFState> state) {
|
|||
state->root_nodes.push_back(nodes[j]);
|
||||
}
|
||||
|
||||
if (s.has("name") && s["name"] != "") {
|
||||
if (s.has("name") && !String(s["name"]).is_empty() && !((String)s["name"]).begins_with("Scene")) {
|
||||
state->scene_name = _gen_unique_name(state, s["name"]);
|
||||
} else {
|
||||
state->scene_name = _gen_unique_name(state, "Scene");
|
||||
state->scene_name = _gen_unique_name(state, state->filename);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2449,6 +2449,12 @@ Error GLTFDocument::_parse_meshes(Ref<GLTFState> state) {
|
|||
const Dictionary &extras = d.has("extras") ? (Dictionary)d["extras"] : Dictionary();
|
||||
Ref<EditorSceneImporterMesh> import_mesh;
|
||||
import_mesh.instance();
|
||||
String mesh_name = "mesh";
|
||||
if (d.has("name") && !String(d["name"]).is_empty()) {
|
||||
mesh_name = d["name"];
|
||||
}
|
||||
import_mesh->set_name(_gen_unique_name(state, vformat("%s_%s", state->scene_name, mesh_name)));
|
||||
|
||||
for (int j = 0; j < primitives.size(); j++) {
|
||||
Dictionary p = primitives[j];
|
||||
|
||||
|
@ -3343,8 +3349,10 @@ Error GLTFDocument::_parse_materials(Ref<GLTFState> state) {
|
|||
|
||||
Ref<StandardMaterial3D> material;
|
||||
material.instance();
|
||||
if (d.has("name")) {
|
||||
if (d.has("name") && !String(d["name"]).is_empty()) {
|
||||
material->set_name(d["name"]);
|
||||
} else {
|
||||
material->set_name(vformat("material_%s", itos(i)));
|
||||
}
|
||||
material->set_flag(BaseMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true);
|
||||
Dictionary pbr_spec_gloss_extensions;
|
||||
|
@ -3881,8 +3889,10 @@ Error GLTFDocument::_parse_skins(Ref<GLTFState> state) {
|
|||
state->nodes.write[node]->joint = true;
|
||||
}
|
||||
|
||||
if (d.has("name")) {
|
||||
if (d.has("name") && !String(d["name"]).is_empty()) {
|
||||
skin->set_name(d["name"]);
|
||||
} else {
|
||||
skin->set_name(vformat("skin_%s", itos(i)));
|
||||
}
|
||||
|
||||
if (d.has("skeleton")) {
|
||||
|
@ -6356,6 +6366,9 @@ Error GLTFDocument::parse(Ref<GLTFState> state, String p_path, bool p_read_binar
|
|||
}
|
||||
f->close();
|
||||
|
||||
// get file's name, use for scene name if none
|
||||
state->filename = p_path.get_file().get_slice(".", 0);
|
||||
|
||||
ERR_FAIL_COND_V(!state->json.has("asset"), Error::FAILED);
|
||||
|
||||
Dictionary asset = state->json["asset"];
|
||||
|
|
|
@ -53,6 +53,7 @@ class GLTFState : public Resource {
|
|||
friend class GLTFDocument;
|
||||
friend class PackedSceneGLTF;
|
||||
|
||||
String filename;
|
||||
Dictionary json;
|
||||
int major_version = 0;
|
||||
int minor_version = 0;
|
||||
|
|
Loading…
Reference in a new issue