From 96147544feffd9f96ce72e91311cff936a8522f5 Mon Sep 17 00:00:00 2001 From: Lyuma Date: Tue, 24 Dec 2024 02:53:37 -0800 Subject: [PATCH] Expose unregister_all_ and get_all_gltf_document_extensions --- modules/gltf/doc_classes/GLTFDocument.xml | 16 ++++++++++++++++ .../GLTFDocumentExtensionConvertImporterMesh.xml | 4 ++++ modules/gltf/gltf_document.cpp | 10 ++++++++++ modules/gltf/gltf_document.h | 1 + 4 files changed, 31 insertions(+) diff --git a/modules/gltf/doc_classes/GLTFDocument.xml b/modules/gltf/doc_classes/GLTFDocument.xml index 47ffc624bad9..be3e58c5153d 100644 --- a/modules/gltf/doc_classes/GLTFDocument.xml +++ b/modules/gltf/doc_classes/GLTFDocument.xml @@ -95,6 +95,7 @@ Registers the given [GLTFDocumentExtension] instance with GLTFDocument. If [param first_priority] is [code]true[/code], this extension will be run first. Otherwise, it will be run last. [b]Note:[/b] Like GLTFDocument itself, all GLTFDocumentExtension classes must be stateless in order to function properly. If you need to store data, use the [code]set_additional_data[/code] and [code]get_additional_data[/code] methods in [GLTFState] or [GLTFNode]. + [b]Note:[/b] This method is static: Registered instances will be shared by all [GLTFDocument] instances. Beware that multiple instances of a single [GLTFDocumentExtension] class can often lead to unexpected behavior, and consider using [method get_all_gltf_document_extensions] to verify that only one instance of a given extension is registered. @@ -102,6 +103,21 @@ Unregisters the given [GLTFDocumentExtension] instance. + [b]Note:[/b] This method is static: Registering and unregistering instances will affect all [GLTFDocument] instances. + + + + + + Returns all registered [GLTFDocumentExtension] instances, including a default [GLTFDocumentExtensionConvertImporterMesh] instance at runtime. + [b]Note:[/b] This method is static: Registered instances will be shared by all [GLTFDocument] instances. Consider using this method to check if a given [GLTFDocumentExtension] is already registered. + + + + + + Unregisters all [GLTFDocumentExtension] instances, including the default [GLTFDocumentExtensionConvertImporterMesh] instance at runtime. + [b]Note:[/b] This method is static: Unregistering instances will affect all [GLTFDocument] instances. diff --git a/modules/gltf/doc_classes/GLTFDocumentExtensionConvertImporterMesh.xml b/modules/gltf/doc_classes/GLTFDocumentExtensionConvertImporterMesh.xml index 04075caba5b8..0c30c3f428c3 100644 --- a/modules/gltf/doc_classes/GLTFDocumentExtensionConvertImporterMesh.xml +++ b/modules/gltf/doc_classes/GLTFDocumentExtensionConvertImporterMesh.xml @@ -1,8 +1,12 @@ + A default [GLTFDocumentExtension] to convert [ImporterMeshInstance3D] nodes to [MeshInstance3D]. + This [GLTFDocumentExtension] is installed by default at runtime, but not in the editor. It converts all [ImporterMeshInstance3D] nodes and related [ImporterMesh] resources to [MeshInstance3D] nodes with [ArrayMesh] resources. + + If it is important for a custom [GLTFDocumentExtension] to work with [ImporterMesh] at runtime, it is recommended to call [method GLTFDocument.register_gltf_document_extension] with the [code]true[/code] argument to prepend it to this default extension. $DOCS_URL/tutorials/io/runtime_file_loading_and_saving.html diff --git a/modules/gltf/gltf_document.cpp b/modules/gltf/gltf_document.cpp index 6da56616b715..db4244726aab 100644 --- a/modules/gltf/gltf_document.cpp +++ b/modules/gltf/gltf_document.cpp @@ -8152,6 +8152,8 @@ void GLTFDocument::_bind_methods() { &GLTFDocument::register_gltf_document_extension, DEFVAL(false)); ClassDB::bind_static_method("GLTFDocument", D_METHOD("unregister_gltf_document_extension", "extension"), &GLTFDocument::unregister_gltf_document_extension); + ClassDB::bind_static_method("GLTFDocument", D_METHOD("unregister_all_gltf_document_extensions"), &GLTFDocument::unregister_all_gltf_document_extensions); + ClassDB::bind_static_method("GLTFDocument", D_METHOD("get_all_gltf_document_extensions"), &GLTFDocument::_get_all_gltf_document_extensions); ClassDB::bind_static_method("GLTFDocument", D_METHOD("get_supported_gltf_extensions"), &GLTFDocument::get_supported_gltf_extensions); } @@ -8194,6 +8196,14 @@ Vector> GLTFDocument::get_all_gltf_document_extension return all_document_extensions; } +TypedArray GLTFDocument::_get_all_gltf_document_extensions() { + TypedArray ret; + for (Ref ext : all_document_extensions) { + ret.append(ext); + } + return ret; +} + Vector GLTFDocument::get_supported_gltf_extensions() { HashSet set = get_supported_gltf_extensions_hashset(); Vector vec; diff --git a/modules/gltf/gltf_document.h b/modules/gltf/gltf_document.h index a6d6caa3f0a7..75737ec4c17e 100644 --- a/modules/gltf/gltf_document.h +++ b/modules/gltf/gltf_document.h @@ -85,6 +85,7 @@ class GLTFDocument : public Resource { static void unregister_gltf_document_extension(Ref p_extension); static void unregister_all_gltf_document_extensions(); static Vector> get_all_gltf_document_extensions(); + static TypedArray _get_all_gltf_document_extensions(); static Vector get_supported_gltf_extensions(); static HashSet get_supported_gltf_extensions_hashset();