37
37
void GLTFDocumentExtensionConvertImporterMesh::_bind_methods () {
38
38
}
39
39
40
+ MeshInstance3D *GLTFDocumentExtensionConvertImporterMesh::convert_importer_mesh_instance_3d (ImporterMeshInstance3D *p_importer_mesh_instance_3d) {
41
+ // Convert the node itself first.
42
+ MeshInstance3D *mesh_instance_node_3d = memnew (MeshInstance3D);
43
+ ERR_FAIL_NULL_V (p_importer_mesh_instance_3d, mesh_instance_node_3d);
44
+ mesh_instance_node_3d->set_name (p_importer_mesh_instance_3d->get_name ());
45
+ mesh_instance_node_3d->set_transform (p_importer_mesh_instance_3d->get_transform ());
46
+ mesh_instance_node_3d->set_skin (p_importer_mesh_instance_3d->get_skin ());
47
+ mesh_instance_node_3d->set_skeleton_path (p_importer_mesh_instance_3d->get_skeleton_path ());
48
+ mesh_instance_node_3d->set_visible (p_importer_mesh_instance_3d->is_visible ());
49
+ p_importer_mesh_instance_3d->replace_by (mesh_instance_node_3d);
50
+ // Convert the mesh data in the mesh resource.
51
+ Ref<ImporterMesh> importer_mesh = p_importer_mesh_instance_3d->get_mesh ();
52
+ if (importer_mesh.is_valid ()) {
53
+ Ref<ArrayMesh> array_mesh = importer_mesh->get_mesh ();
54
+ mesh_instance_node_3d->set_mesh (array_mesh);
55
+ } else {
56
+ WARN_PRINT (" glTF: ImporterMeshInstance3D does not have a valid mesh. This should not happen. Continuing anyway." );
57
+ }
58
+ return mesh_instance_node_3d;
59
+ }
60
+
40
61
Error GLTFDocumentExtensionConvertImporterMesh::import_post (Ref<GLTFState> p_state, Node *p_root) {
41
62
ERR_FAIL_NULL_V (p_root, ERR_INVALID_PARAMETER);
42
63
ERR_FAIL_NULL_V (p_state, ERR_INVALID_PARAMETER);
@@ -48,22 +69,8 @@ Error GLTFDocumentExtensionConvertImporterMesh::import_post(Ref<GLTFState> p_sta
48
69
Node *node = E->get ();
49
70
ImporterMeshInstance3D *importer_mesh_3d = Object::cast_to<ImporterMeshInstance3D>(node);
50
71
if (importer_mesh_3d) {
51
- MeshInstance3D *mesh_instance_node_3d = memnew (MeshInstance3D);
52
- Ref<ImporterMesh> mesh = importer_mesh_3d->get_mesh ();
53
- if (mesh.is_valid ()) {
54
- Ref<ArrayMesh> array_mesh = mesh->get_mesh ();
55
- mesh_instance_node_3d->set_name (node->get_name ());
56
- mesh_instance_node_3d->set_transform (importer_mesh_3d->get_transform ());
57
- mesh_instance_node_3d->set_mesh (array_mesh);
58
- mesh_instance_node_3d->set_skin (importer_mesh_3d->get_skin ());
59
- mesh_instance_node_3d->set_skeleton_path (importer_mesh_3d->get_skeleton_path ());
60
- mesh_instance_node_3d->set_visible (importer_mesh_3d->is_visible ());
61
- node->replace_by (mesh_instance_node_3d);
62
- delete_queue.push_back (node);
63
- node = mesh_instance_node_3d;
64
- } else {
65
- memdelete (mesh_instance_node_3d);
66
- }
72
+ delete_queue.push_back (importer_mesh_3d);
73
+ node = convert_importer_mesh_instance_3d (importer_mesh_3d);
67
74
}
68
75
int child_count = node->get_child_count ();
69
76
for (int i = 0 ; i < child_count; i++) {
0 commit comments