Skip to content

Commit ec16629

Browse files
authored
Merge pull request #1397 from dsnopek/script-free-lists
Load new `script_instance_create3` GDExtension interface function
2 parents 916b4ff + 8b92368 commit ec16629

File tree

3 files changed

+65
-8
lines changed

3 files changed

+65
-8
lines changed

gdextension/gdextension_interface.h

+62-5
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,8 @@ typedef void *GDExtensionScriptInstanceDataPtr; // Pointer to custom ScriptInsta
515515
typedef GDExtensionBool (*GDExtensionScriptInstanceSet)(GDExtensionScriptInstanceDataPtr p_instance, GDExtensionConstStringNamePtr p_name, GDExtensionConstVariantPtr p_value);
516516
typedef GDExtensionBool (*GDExtensionScriptInstanceGet)(GDExtensionScriptInstanceDataPtr p_instance, GDExtensionConstStringNamePtr p_name, GDExtensionVariantPtr r_ret);
517517
typedef const GDExtensionPropertyInfo *(*GDExtensionScriptInstanceGetPropertyList)(GDExtensionScriptInstanceDataPtr p_instance, uint32_t *r_count);
518-
typedef void (*GDExtensionScriptInstanceFreePropertyList)(GDExtensionScriptInstanceDataPtr p_instance, const GDExtensionPropertyInfo *p_list);
518+
typedef void (*GDExtensionScriptInstanceFreePropertyList)(GDExtensionScriptInstanceDataPtr p_instance, const GDExtensionPropertyInfo *p_list); // Deprecated. Use GDExtensionScriptInstanceFreePropertyList2 instead.
519+
typedef void (*GDExtensionScriptInstanceFreePropertyList2)(GDExtensionScriptInstanceDataPtr p_instance, const GDExtensionPropertyInfo *p_list, uint32_t p_count);
519520
typedef GDExtensionBool (*GDExtensionScriptInstanceGetClassCategory)(GDExtensionScriptInstanceDataPtr p_instance, GDExtensionPropertyInfo *p_class_category);
520521

521522
typedef GDExtensionVariantType (*GDExtensionScriptInstanceGetPropertyType)(GDExtensionScriptInstanceDataPtr p_instance, GDExtensionConstStringNamePtr p_name, GDExtensionBool *r_is_valid);
@@ -529,7 +530,8 @@ typedef void (*GDExtensionScriptInstancePropertyStateAdd)(GDExtensionConstString
529530
typedef void (*GDExtensionScriptInstanceGetPropertyState)(GDExtensionScriptInstanceDataPtr p_instance, GDExtensionScriptInstancePropertyStateAdd p_add_func, void *p_userdata);
530531

531532
typedef const GDExtensionMethodInfo *(*GDExtensionScriptInstanceGetMethodList)(GDExtensionScriptInstanceDataPtr p_instance, uint32_t *r_count);
532-
typedef void (*GDExtensionScriptInstanceFreeMethodList)(GDExtensionScriptInstanceDataPtr p_instance, const GDExtensionMethodInfo *p_list);
533+
typedef void (*GDExtensionScriptInstanceFreeMethodList)(GDExtensionScriptInstanceDataPtr p_instance, const GDExtensionMethodInfo *p_list); // Deprecated. Use GDExtensionScriptInstanceFreeMethodList2 instead.
534+
typedef void (*GDExtensionScriptInstanceFreeMethodList2)(GDExtensionScriptInstanceDataPtr p_instance, const GDExtensionMethodInfo *p_list, uint32_t p_count);
533535

534536
typedef GDExtensionBool (*GDExtensionScriptInstanceHasMethod)(GDExtensionScriptInstanceDataPtr p_instance, GDExtensionConstStringNamePtr p_name);
535537

@@ -589,7 +591,7 @@ typedef struct {
589591

590592
GDExtensionScriptInstanceFree free_func;
591593

592-
} GDExtensionScriptInstanceInfo; // Deprecated. Use GDExtensionScriptInstanceInfo2 instead.
594+
} GDExtensionScriptInstanceInfo; // Deprecated. Use GDExtensionScriptInstanceInfo3 instead.
593595

594596
typedef struct {
595597
GDExtensionScriptInstanceSet set_func;
@@ -630,7 +632,48 @@ typedef struct {
630632

631633
GDExtensionScriptInstanceFree free_func;
632634

633-
} GDExtensionScriptInstanceInfo2;
635+
} GDExtensionScriptInstanceInfo2; // Deprecated. Use GDExtensionScriptInstanceInfo3 instead.
636+
637+
typedef struct {
638+
GDExtensionScriptInstanceSet set_func;
639+
GDExtensionScriptInstanceGet get_func;
640+
GDExtensionScriptInstanceGetPropertyList get_property_list_func;
641+
GDExtensionScriptInstanceFreePropertyList2 free_property_list_func;
642+
GDExtensionScriptInstanceGetClassCategory get_class_category_func; // Optional. Set to NULL for the default behavior.
643+
644+
GDExtensionScriptInstancePropertyCanRevert property_can_revert_func;
645+
GDExtensionScriptInstancePropertyGetRevert property_get_revert_func;
646+
647+
GDExtensionScriptInstanceGetOwner get_owner_func;
648+
GDExtensionScriptInstanceGetPropertyState get_property_state_func;
649+
650+
GDExtensionScriptInstanceGetMethodList get_method_list_func;
651+
GDExtensionScriptInstanceFreeMethodList2 free_method_list_func;
652+
GDExtensionScriptInstanceGetPropertyType get_property_type_func;
653+
GDExtensionScriptInstanceValidateProperty validate_property_func;
654+
655+
GDExtensionScriptInstanceHasMethod has_method_func;
656+
657+
GDExtensionScriptInstanceCall call_func;
658+
GDExtensionScriptInstanceNotification2 notification_func;
659+
660+
GDExtensionScriptInstanceToString to_string_func;
661+
662+
GDExtensionScriptInstanceRefCountIncremented refcount_incremented_func;
663+
GDExtensionScriptInstanceRefCountDecremented refcount_decremented_func;
664+
665+
GDExtensionScriptInstanceGetScript get_script_func;
666+
667+
GDExtensionScriptInstanceIsPlaceholder is_placeholder_func;
668+
669+
GDExtensionScriptInstanceSet set_fallback_func;
670+
GDExtensionScriptInstanceGet get_fallback_func;
671+
672+
GDExtensionScriptInstanceGetLanguage get_language_func;
673+
674+
GDExtensionScriptInstanceFree free_func;
675+
676+
} GDExtensionScriptInstanceInfo3;
634677

635678
/* INITIALIZATION */
636679

@@ -2412,7 +2455,7 @@ typedef void (*GDExtensionInterfaceRefSetObject)(GDExtensionRefPtr p_ref, GDExte
24122455
/**
24132456
* @name script_instance_create
24142457
* @since 4.1
2415-
* @deprecated in Godot 4.2. Use `script_instance_create2` instead.
2458+
* @deprecated in Godot 4.2. Use `script_instance_create3` instead.
24162459
*
24172460
* Creates a script instance that contains the given info and instance data.
24182461
*
@@ -2426,6 +2469,7 @@ typedef GDExtensionScriptInstancePtr (*GDExtensionInterfaceScriptInstanceCreate)
24262469
/**
24272470
* @name script_instance_create2
24282471
* @since 4.2
2472+
* @deprecated in Godot 4.3. Use `script_instance_create3` instead.
24292473
*
24302474
* Creates a script instance that contains the given info and instance data.
24312475
*
@@ -2436,6 +2480,19 @@ typedef GDExtensionScriptInstancePtr (*GDExtensionInterfaceScriptInstanceCreate)
24362480
*/
24372481
typedef GDExtensionScriptInstancePtr (*GDExtensionInterfaceScriptInstanceCreate2)(const GDExtensionScriptInstanceInfo2 *p_info, GDExtensionScriptInstanceDataPtr p_instance_data);
24382482

2483+
/**
2484+
* @name script_instance_create3
2485+
* @since 4.3
2486+
*
2487+
* Creates a script instance that contains the given info and instance data.
2488+
*
2489+
* @param p_info A pointer to a GDExtensionScriptInstanceInfo3 struct.
2490+
* @param p_instance_data A pointer to a data representing the script instance in the GDExtension. This will be passed to all the function pointers on p_info.
2491+
*
2492+
* @return A pointer to a ScriptInstanceExtension object.
2493+
*/
2494+
typedef GDExtensionScriptInstancePtr (*GDExtensionInterfaceScriptInstanceCreate3)(const GDExtensionScriptInstanceInfo3 *p_info, GDExtensionScriptInstanceDataPtr p_instance_data);
2495+
24392496
/**
24402497
* @name placeholder_script_instance_create
24412498
* @since 4.2

include/godot_cpp/godot.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ extern "C" GDExtensionInterfaceCallableCustomCreate2 gdextension_interface_calla
171171
extern "C" GDExtensionInterfaceCallableCustomGetUserData gdextension_interface_callable_custom_get_userdata;
172172
extern "C" GDExtensionInterfaceRefGetObject gdextension_interface_ref_get_object;
173173
extern "C" GDExtensionInterfaceRefSetObject gdextension_interface_ref_set_object;
174-
extern "C" GDExtensionInterfaceScriptInstanceCreate2 gdextension_interface_script_instance_create2;
174+
extern "C" GDExtensionInterfaceScriptInstanceCreate3 gdextension_interface_script_instance_create3;
175175
extern "C" GDExtensionInterfacePlaceHolderScriptInstanceCreate gdextension_interface_placeholder_script_instance_create;
176176
extern "C" GDExtensionInterfacePlaceHolderScriptInstanceUpdate gdextension_interface_placeholder_script_instance_update;
177177
extern "C" GDExtensionInterfaceClassdbConstructObject gdextension_interface_classdb_construct_object;

src/godot.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ GDExtensionInterfaceCallableCustomCreate2 gdextension_interface_callable_custom_
177177
GDExtensionInterfaceCallableCustomGetUserData gdextension_interface_callable_custom_get_userdata = nullptr;
178178
GDExtensionInterfaceRefGetObject gdextension_interface_ref_get_object = nullptr;
179179
GDExtensionInterfaceRefSetObject gdextension_interface_ref_set_object = nullptr;
180-
GDExtensionInterfaceScriptInstanceCreate2 gdextension_interface_script_instance_create2 = nullptr;
180+
GDExtensionInterfaceScriptInstanceCreate3 gdextension_interface_script_instance_create3 = nullptr;
181181
GDExtensionInterfacePlaceHolderScriptInstanceCreate gdextension_interface_placeholder_script_instance_create = nullptr;
182182
GDExtensionInterfacePlaceHolderScriptInstanceUpdate gdextension_interface_placeholder_script_instance_update = nullptr;
183183
GDExtensionInterfaceClassdbConstructObject gdextension_interface_classdb_construct_object = nullptr;
@@ -417,7 +417,7 @@ GDExtensionBool GDExtensionBinding::init(GDExtensionInterfaceGetProcAddress p_ge
417417
LOAD_PROC_ADDRESS(callable_custom_get_userdata, GDExtensionInterfaceCallableCustomGetUserData);
418418
LOAD_PROC_ADDRESS(ref_get_object, GDExtensionInterfaceRefGetObject);
419419
LOAD_PROC_ADDRESS(ref_set_object, GDExtensionInterfaceRefSetObject);
420-
LOAD_PROC_ADDRESS(script_instance_create2, GDExtensionInterfaceScriptInstanceCreate2);
420+
LOAD_PROC_ADDRESS(script_instance_create3, GDExtensionInterfaceScriptInstanceCreate3);
421421
LOAD_PROC_ADDRESS(placeholder_script_instance_create, GDExtensionInterfacePlaceHolderScriptInstanceCreate);
422422
LOAD_PROC_ADDRESS(placeholder_script_instance_update, GDExtensionInterfacePlaceHolderScriptInstanceUpdate);
423423
LOAD_PROC_ADDRESS(classdb_construct_object, GDExtensionInterfaceClassdbConstructObject);

0 commit comments

Comments
 (0)