Merge pull request #105787 from zodywoolsey/fbx-runtime-fixing
Fix fbx runtime import not generating meshes properly
This commit is contained in:
@ -40,6 +40,8 @@ module_obj = []
|
||||
env_fbx.add_source_files(module_obj, "*.cpp")
|
||||
env_fbx.add_source_files(module_obj, "structures/*.cpp")
|
||||
|
||||
SConscript("extensions/SCsub")
|
||||
|
||||
if env.editor_build:
|
||||
env_fbx.add_source_files(module_obj, "editor/*.cpp")
|
||||
|
||||
|
||||
11
modules/fbx/extensions/SCsub
Normal file
11
modules/fbx/extensions/SCsub
Normal file
@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env python
|
||||
from misc.utility.scons_hints import *
|
||||
|
||||
Import("env")
|
||||
Import("env_modules")
|
||||
|
||||
env_gltf = env_modules.Clone()
|
||||
|
||||
# Godot source files
|
||||
|
||||
env_gltf.add_source_files(env.modules_sources, "*.cpp")
|
||||
@ -2103,6 +2103,15 @@ Error FBXDocument::_parse(Ref<FBXState> p_state, String p_path, Ref<FileAccess>
|
||||
WARN_PRINT(vformat("FBX: ignored %d further ufbx warnings", ignored_warning_count));
|
||||
}
|
||||
|
||||
document_extensions.clear();
|
||||
for (Ref<GLTFDocumentExtension> ext : all_document_extensions) {
|
||||
ERR_CONTINUE(ext.is_null());
|
||||
err = ext->import_preflight(p_state, p_state->json["extensionsUsed"]);
|
||||
if (err == OK) {
|
||||
document_extensions.push_back(ext);
|
||||
}
|
||||
}
|
||||
|
||||
err = _parse_fbx_state(p_state, p_path);
|
||||
ERR_FAIL_COND_V(err != OK, err);
|
||||
|
||||
@ -2130,6 +2139,27 @@ Node *FBXDocument::generate_scene(Ref<GLTFState> p_state, float p_bake_fps, bool
|
||||
_import_animation(state, ap, i, p_trimming, p_remove_immutable_tracks);
|
||||
}
|
||||
}
|
||||
for (KeyValue<GLTFNodeIndex, Node *> E : state->scene_nodes) {
|
||||
ERR_CONTINUE(!E.value);
|
||||
for (Ref<GLTFDocumentExtension> ext : document_extensions) {
|
||||
ERR_CONTINUE(ext.is_null());
|
||||
Dictionary node_json;
|
||||
if (state->json.has("nodes")) {
|
||||
Array nodes = state->json["nodes"];
|
||||
if (0 <= E.key && E.key < nodes.size()) {
|
||||
node_json = nodes[E.key];
|
||||
}
|
||||
}
|
||||
Ref<GLTFNode> gltf_node = state->nodes[E.key];
|
||||
Error err = ext->import_node(p_state, gltf_node, node_json, E.value);
|
||||
ERR_CONTINUE(err != OK);
|
||||
}
|
||||
}
|
||||
for (Ref<GLTFDocumentExtension> ext : document_extensions) {
|
||||
ERR_CONTINUE(ext.is_null());
|
||||
Error err = ext->import_post(p_state, root);
|
||||
ERR_CONTINUE(err != OK);
|
||||
}
|
||||
ERR_FAIL_NULL_V(root, nullptr);
|
||||
return root;
|
||||
}
|
||||
@ -2148,12 +2178,11 @@ Error FBXDocument::append_from_buffer(PackedByteArray p_bytes, String p_base_pat
|
||||
state->base_path = p_base_path.get_base_dir();
|
||||
err = _parse(state, state->base_path, file_access);
|
||||
ERR_FAIL_COND_V(err != OK, err);
|
||||
// TODO: 202040118 // fire
|
||||
// for (Ref<GLTFDocumentExtension> ext : get_all_gltf_document_extensions()) {
|
||||
// ERR_CONTINUE(ext.is_null());
|
||||
// err = ext->import_post_parse(state);
|
||||
// ERR_FAIL_COND_V(err != OK, err);
|
||||
// }
|
||||
for (Ref<GLTFDocumentExtension> ext : document_extensions) {
|
||||
ERR_CONTINUE(ext.is_null());
|
||||
err = ext->import_post_parse(state);
|
||||
ERR_FAIL_COND_V(err != OK, err);
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
||||
@ -2247,12 +2276,11 @@ Error FBXDocument::append_from_file(String p_path, Ref<GLTFState> p_state, uint3
|
||||
state->base_path = base_path;
|
||||
err = _parse(p_state, base_path, file);
|
||||
ERR_FAIL_COND_V(err != OK, err);
|
||||
// TODO: 20240118 // fire
|
||||
// for (Ref<GLTFDocumentExtension> ext : document_extensions) {
|
||||
// ERR_CONTINUE(ext.is_null());
|
||||
// err = ext->import_post_parse(p_state);
|
||||
// ERR_FAIL_COND_V(err != OK, err);
|
||||
// }
|
||||
for (Ref<GLTFDocumentExtension> ext : document_extensions) {
|
||||
ERR_CONTINUE(ext.is_null());
|
||||
err = ext->import_post_parse(p_state);
|
||||
ERR_FAIL_COND_V(err != OK, err);
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
||||
@ -30,6 +30,7 @@
|
||||
|
||||
#include "register_types.h"
|
||||
|
||||
#include "../gltf/extensions/gltf_document_extension_convert_importer_mesh.h"
|
||||
#include "fbx_document.h"
|
||||
|
||||
#ifdef TOOLS_ENABLED
|
||||
@ -53,10 +54,19 @@ static void _editor_init() {
|
||||
}
|
||||
#endif // TOOLS_ENABLED
|
||||
|
||||
#define FBX_REGISTER_DOCUMENT_EXTENSION(m_doc_ext_class) \
|
||||
Ref<m_doc_ext_class> extension_##m_doc_ext_class; \
|
||||
extension_##m_doc_ext_class.instantiate(); \
|
||||
FBXDocument::register_gltf_document_extension(extension_##m_doc_ext_class);
|
||||
|
||||
void initialize_fbx_module(ModuleInitializationLevel p_level) {
|
||||
if (p_level == MODULE_INITIALIZATION_LEVEL_SCENE) {
|
||||
GDREGISTER_CLASS(FBXDocument);
|
||||
GDREGISTER_CLASS(FBXState);
|
||||
bool is_editor = Engine::get_singleton()->is_editor_hint();
|
||||
if (!is_editor) {
|
||||
FBX_REGISTER_DOCUMENT_EXTENSION(GLTFDocumentExtensionConvertImporterMesh);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef TOOLS_ENABLED
|
||||
@ -77,6 +87,5 @@ void uninitialize_fbx_module(ModuleInitializationLevel p_level) {
|
||||
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
|
||||
return;
|
||||
}
|
||||
// TODO: 20240118 // fire
|
||||
// FBXDocument::unregister_all_gltf_document_extensions();
|
||||
FBXDocument::unregister_all_gltf_document_extensions();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user