@@ -47,10 +47,10 @@ GDExtensionInterfaceGetProcAddress gdextension_interface_get_proc_address = null
4747GDExtensionClassLibraryPtr library = nullptr ;
4848void *token = nullptr ;
4949
50- GDExtensionGodotVersion godot_version = { 0 , 0 , 0 , nullptr };
50+ GDExtensionGodotVersion2 godot_version = {};
5151
5252// All of the GDExtension interface functions.
53- GDExtensionInterfaceGetGodotVersion gdextension_interface_get_godot_version = nullptr ;
53+ GDExtensionInterfaceGetGodotVersion2 gdextension_interface_get_godot_version2 = nullptr ;
5454GDExtensionInterfaceMemAlloc gdextension_interface_mem_alloc = nullptr ;
5555GDExtensionInterfaceMemRealloc gdextension_interface_mem_realloc = nullptr ;
5656GDExtensionInterfaceMemFree gdextension_interface_mem_free = nullptr ;
@@ -162,7 +162,6 @@ GDExtensionInterfacePackedVector4ArrayOperatorIndex gdextension_interface_packed
162162GDExtensionInterfacePackedVector4ArrayOperatorIndexConst gdextension_interface_packed_vector4_array_operator_index_const = nullptr ;
163163GDExtensionInterfaceArrayOperatorIndex gdextension_interface_array_operator_index = nullptr ;
164164GDExtensionInterfaceArrayOperatorIndexConst gdextension_interface_array_operator_index_const = nullptr ;
165- GDExtensionInterfaceArrayRef gdextension_interface_array_ref = nullptr ;
166165GDExtensionInterfaceArraySetTyped gdextension_interface_array_set_typed = nullptr ;
167166GDExtensionInterfaceDictionaryOperatorIndex gdextension_interface_dictionary_operator_index = nullptr ;
168167GDExtensionInterfaceDictionaryOperatorIndexConst gdextension_interface_dictionary_operator_index_const = nullptr ;
@@ -211,6 +210,7 @@ GDExtensionsInterfaceEditorHelpLoadXmlFromUtf8Chars gdextension_interface_editor
211210GDExtensionsInterfaceEditorHelpLoadXmlFromUtf8CharsAndLen gdextension_interface_editor_help_load_xml_from_utf8_chars_and_len = nullptr ;
212211GDExtensionInterfaceImagePtrw gdextension_interface_image_ptrw = nullptr ;
213212GDExtensionInterfaceImagePtr gdextension_interface_image_ptr = nullptr ;
213+ GDExtensionInterfaceRegisterMainLoopCallbacks gdextension_interface_register_main_loop_callbacks = nullptr ;
214214
215215struct DocData {
216216 const char *hash = nullptr ;
@@ -308,8 +308,8 @@ GDExtensionBool GDExtensionBinding::init(GDExtensionInterfaceGetProcAddress p_ge
308308 internal::library = p_library;
309309 internal::token = p_library;
310310
311- LOAD_PROC_ADDRESS (get_godot_version, GDExtensionInterfaceGetGodotVersion );
312- internal::gdextension_interface_get_godot_version (&internal::godot_version);
311+ LOAD_PROC_ADDRESS (get_godot_version2, GDExtensionInterfaceGetGodotVersion2 );
312+ internal::gdextension_interface_get_godot_version2 (&internal::godot_version);
313313
314314 // Check that godot-cpp was compiled using an extension_api.json older or at the
315315 // same version as the Godot that is loading it.
@@ -447,7 +447,6 @@ GDExtensionBool GDExtensionBinding::init(GDExtensionInterfaceGetProcAddress p_ge
447447 LOAD_PROC_ADDRESS (packed_vector4_array_operator_index_const, GDExtensionInterfacePackedVector4ArrayOperatorIndexConst);
448448 LOAD_PROC_ADDRESS (array_operator_index, GDExtensionInterfaceArrayOperatorIndex);
449449 LOAD_PROC_ADDRESS (array_operator_index_const, GDExtensionInterfaceArrayOperatorIndexConst);
450- LOAD_PROC_ADDRESS (array_ref, GDExtensionInterfaceArrayRef);
451450 LOAD_PROC_ADDRESS (array_set_typed, GDExtensionInterfaceArraySetTyped);
452451 LOAD_PROC_ADDRESS (dictionary_operator_index, GDExtensionInterfaceDictionaryOperatorIndex);
453452 LOAD_PROC_ADDRESS (dictionary_operator_index_const, GDExtensionInterfaceDictionaryOperatorIndexConst);
@@ -496,6 +495,7 @@ GDExtensionBool GDExtensionBinding::init(GDExtensionInterfaceGetProcAddress p_ge
496495 LOAD_PROC_ADDRESS (editor_help_load_xml_from_utf8_chars_and_len, GDExtensionsInterfaceEditorHelpLoadXmlFromUtf8CharsAndLen);
497496 LOAD_PROC_ADDRESS (image_ptrw, GDExtensionInterfaceImagePtrw);
498497 LOAD_PROC_ADDRESS (image_ptr, GDExtensionInterfaceImagePtr);
498+ LOAD_PROC_ADDRESS (register_main_loop_callbacks, GDExtensionInterfaceRegisterMainLoopCallbacks);
499499
500500 r_initialization->initialize = initialize_level;
501501 r_initialization->deinitialize = deinitialize_level;
@@ -526,6 +526,10 @@ void GDExtensionBinding::initialize_level(void *p_userdata, GDExtensionInitializ
526526 }
527527 level_initialized[p_level]++;
528528
529+ if ((ModuleInitializationLevel)p_level == MODULE_INITIALIZATION_LEVEL_CORE && init_data && init_data->has_main_loop_callbacks ()) {
530+ internal::gdextension_interface_register_main_loop_callbacks (internal::library, &init_data->main_loop_callbacks );
531+ }
532+
529533 if ((ModuleInitializationLevel)p_level == MODULE_INITIALIZATION_LEVEL_EDITOR) {
530534 internal::gdextension_interface_editor_register_get_classes_used_callback (internal::library, &ClassDB::_editor_get_classes_used_callback);
531535
@@ -596,6 +600,18 @@ void GDExtensionBinding::InitObject::set_minimum_library_initialization_level(Mo
596600 init_data->minimum_initialization_level = static_cast <GDExtensionInitializationLevel>(p_level);
597601}
598602
603+ void GDExtensionBinding::InitObject::register_startup_callback (GDExtensionMainLoopStartupCallback p_callback) const {
604+ init_data->main_loop_callbacks .startup_func = p_callback;
605+ }
606+
607+ void GDExtensionBinding::InitObject::register_frame_callback (GDExtensionMainLoopFrameCallback p_callback) const {
608+ init_data->main_loop_callbacks .frame_func = p_callback;
609+ }
610+
611+ void GDExtensionBinding::InitObject::register_shutdown_callback (GDExtensionMainLoopShutdownCallback p_callback) const {
612+ init_data->main_loop_callbacks .shutdown_func = p_callback;
613+ }
614+
599615GDExtensionBool GDExtensionBinding::InitObject::init () const {
600616 return GDExtensionBinding::init (get_proc_address, library, init_data, initialization);
601617}
0 commit comments