Skip to content

Commit

Permalink
Merge pull request #47314 from fire/gltf-names
Browse files Browse the repository at this point in the history
Always have a name for gltf2 mesh, material and skins.
  • Loading branch information
akien-mga authored Mar 24, 2021
2 parents e9144d2 + 60eb3dd commit 9a64d6b
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 4 deletions.
21 changes: 17 additions & 4 deletions modules/gltf/gltf_document.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}

Expand Down Expand Up @@ -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];

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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")) {
Expand Down Expand Up @@ -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"];
Expand Down
1 change: 1 addition & 0 deletions modules/gltf/gltf_state.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 9a64d6b

Please sign in to comment.