Skip to content

Commit 6789ada

Browse files
New compatibility update
1 parent 575e827 commit 6789ada

File tree

5 files changed

+113
-13
lines changed

5 files changed

+113
-13
lines changed

gdextension/gdextension_interface.h

+103-3
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,37 @@ typedef void (*GDExtensionCallableCustomToString)(void *callable_userdata, GDExt
393393

394394
typedef GDExtensionInt (*GDExtensionCallableCustomGetArgumentCount)(void *callable_userdata);
395395

396+
typedef struct {
397+
/* Only `call_func` and `token` are strictly required, however, `object_id` should be passed if its not a static method.
398+
*
399+
* `token` should point to an address that uniquely identifies the GDExtension (for example, the
400+
* `GDExtensionClassLibraryPtr` passed to the entry symbol function.
401+
*
402+
* `hash_func`, `equal_func`, and `less_than_func` are optional. If not provided both `call_func` and
403+
* `callable_userdata` together are used as the identity of the callable for hashing and comparison purposes.
404+
*
405+
* The hash returned by `hash_func` is cached, `hash_func` will not be called more than once per callable.
406+
*
407+
* `is_valid_func` is necessary if the validity of the callable can change before destruction.
408+
*
409+
* `free_func` is necessary if `callable_userdata` needs to be cleaned up when the callable is freed.
410+
*/
411+
void *callable_userdata;
412+
void *token;
413+
414+
GDObjectInstanceID object_id;
415+
416+
GDExtensionCallableCustomCall call_func;
417+
GDExtensionCallableCustomIsValid is_valid_func;
418+
GDExtensionCallableCustomFree free_func;
419+
420+
GDExtensionCallableCustomHash hash_func;
421+
GDExtensionCallableCustomEqual equal_func;
422+
GDExtensionCallableCustomLessThan less_than_func;
423+
424+
GDExtensionCallableCustomToString to_string_func;
425+
} GDExtensionCallableCustomInfo; // Deprecated. Use GDExtensionCallableCustomInfo2 instead.
426+
396427
typedef struct {
397428
/* Only `call_func` and `token` are strictly required, however, `object_id` should be passed if its not a static method.
398429
*
@@ -424,7 +455,7 @@ typedef struct {
424455
GDExtensionCallableCustomToString to_string_func;
425456

426457
GDExtensionCallableCustomGetArgumentCount get_argument_count_func;
427-
} GDExtensionCallableCustomInfo;
458+
} GDExtensionCallableCustomInfo2;
428459

429460
/* SCRIPT INSTANCE EXTENSION */
430461

@@ -509,7 +540,48 @@ typedef struct {
509540

510541
GDExtensionScriptInstanceFree free_func;
511542

512-
} GDExtensionScriptInstanceInfo; // Deprecated. Use GDExtensionScriptInstanceInfo2 instead.
543+
} GDExtensionScriptInstanceInfo; // Deprecated. Use GDExtensionScriptInstanceInfo3 instead.
544+
545+
typedef struct {
546+
GDExtensionScriptInstanceSet set_func;
547+
GDExtensionScriptInstanceGet get_func;
548+
GDExtensionScriptInstanceGetPropertyList get_property_list_func;
549+
GDExtensionScriptInstanceFreePropertyList free_property_list_func;
550+
GDExtensionScriptInstanceGetClassCategory get_class_category_func; // Optional. Set to NULL for the default behavior.
551+
552+
GDExtensionScriptInstancePropertyCanRevert property_can_revert_func;
553+
GDExtensionScriptInstancePropertyGetRevert property_get_revert_func;
554+
555+
GDExtensionScriptInstanceGetOwner get_owner_func;
556+
GDExtensionScriptInstanceGetPropertyState get_property_state_func;
557+
558+
GDExtensionScriptInstanceGetMethodList get_method_list_func;
559+
GDExtensionScriptInstanceFreeMethodList free_method_list_func;
560+
GDExtensionScriptInstanceGetPropertyType get_property_type_func;
561+
GDExtensionScriptInstanceValidateProperty validate_property_func;
562+
563+
GDExtensionScriptInstanceHasMethod has_method_func;
564+
565+
GDExtensionScriptInstanceCall call_func;
566+
GDExtensionScriptInstanceNotification2 notification_func;
567+
568+
GDExtensionScriptInstanceToString to_string_func;
569+
570+
GDExtensionScriptInstanceRefCountIncremented refcount_incremented_func;
571+
GDExtensionScriptInstanceRefCountDecremented refcount_decremented_func;
572+
573+
GDExtensionScriptInstanceGetScript get_script_func;
574+
575+
GDExtensionScriptInstanceIsPlaceholder is_placeholder_func;
576+
577+
GDExtensionScriptInstanceSet set_fallback_func;
578+
GDExtensionScriptInstanceGet get_fallback_func;
579+
580+
GDExtensionScriptInstanceGetLanguage get_language_func;
581+
582+
GDExtensionScriptInstanceFree free_func;
583+
584+
} GDExtensionScriptInstanceInfo2; // Deprecated. Use GDExtensionScriptInstanceInfo3 instead.
513585

514586
typedef struct {
515587
GDExtensionScriptInstanceSet set_func;
@@ -552,7 +624,7 @@ typedef struct {
552624

553625
GDExtensionScriptInstanceFree free_func;
554626

555-
} GDExtensionScriptInstanceInfo2;
627+
} GDExtensionScriptInstanceInfo3;
556628

557629
/* INITIALIZATION */
558630

@@ -2320,6 +2392,7 @@ typedef GDExtensionScriptInstancePtr (*GDExtensionInterfaceScriptInstanceCreate)
23202392
/**
23212393
* @name script_instance_create2
23222394
* @since 4.2
2395+
* @deprecated in Godot 4.3. Use `script_instance_create3` instead.
23232396
*
23242397
* Creates a script instance that contains the given info and instance data.
23252398
*
@@ -2330,6 +2403,19 @@ typedef GDExtensionScriptInstancePtr (*GDExtensionInterfaceScriptInstanceCreate)
23302403
*/
23312404
typedef GDExtensionScriptInstancePtr (*GDExtensionInterfaceScriptInstanceCreate2)(const GDExtensionScriptInstanceInfo2 *p_info, GDExtensionScriptInstanceDataPtr p_instance_data);
23322405

2406+
/**
2407+
* @name script_instance_create3
2408+
* @since 4.3
2409+
*
2410+
* Creates a script instance that contains the given info and instance data.
2411+
*
2412+
* @param p_info A pointer to a GDExtensionScriptInstanceInfo3 struct.
2413+
* @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.
2414+
*
2415+
* @return A pointer to a ScriptInstanceExtension object.
2416+
*/
2417+
typedef GDExtensionScriptInstancePtr (*GDExtensionInterfaceScriptInstanceCreate3)(const GDExtensionScriptInstanceInfo3 *p_info, GDExtensionScriptInstanceDataPtr p_instance_data);
2418+
23332419
/**
23342420
* @name placeholder_script_instance_create
23352421
* @since 4.2
@@ -2379,6 +2465,7 @@ typedef GDExtensionScriptInstanceDataPtr (*GDExtensionInterfaceObjectGetScriptIn
23792465
/**
23802466
* @name callable_custom_create
23812467
* @since 4.2
2468+
* @deprecated in Godot 4.3. Use `callable_custom_create2` instead.
23822469
*
23832470
* Creates a custom Callable object from a function pointer.
23842471
*
@@ -2389,6 +2476,19 @@ typedef GDExtensionScriptInstanceDataPtr (*GDExtensionInterfaceObjectGetScriptIn
23892476
*/
23902477
typedef void (*GDExtensionInterfaceCallableCustomCreate)(GDExtensionUninitializedTypePtr r_callable, GDExtensionCallableCustomInfo *p_callable_custom_info);
23912478

2479+
/**
2480+
* @name callable_custom_create2
2481+
* @since 4.3
2482+
*
2483+
* Creates a custom Callable object from a function pointer.
2484+
*
2485+
* Provided struct can be safely freed once the function returns.
2486+
*
2487+
* @param r_callable A pointer that will receive the new Callable.
2488+
* @param p_callable_custom_info The info required to construct a Callable.
2489+
*/
2490+
typedef void (*GDExtensionInterfaceCallableCustomCreate2)(GDExtensionUninitializedTypePtr r_callable, GDExtensionCallableCustomInfo2 *p_callable_custom_info);
2491+
23922492
/**
23932493
* @name callable_custom_get_userdata
23942494
* @since 4.2

include/godot_cpp/godot.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -165,11 +165,11 @@ extern "C" GDExtensionInterfaceObjectGetClassName gdextension_interface_object_g
165165
extern "C" GDExtensionInterfaceObjectCastTo gdextension_interface_object_cast_to;
166166
extern "C" GDExtensionInterfaceObjectGetInstanceFromId gdextension_interface_object_get_instance_from_id;
167167
extern "C" GDExtensionInterfaceObjectGetInstanceId gdextension_interface_object_get_instance_id;
168-
extern "C" GDExtensionInterfaceCallableCustomCreate gdextension_interface_callable_custom_create;
168+
extern "C" GDExtensionInterfaceCallableCustomCreate2 gdextension_interface_callable_custom_create2;
169169
extern "C" GDExtensionInterfaceCallableCustomGetUserData gdextension_interface_callable_custom_get_userdata;
170170
extern "C" GDExtensionInterfaceRefGetObject gdextension_interface_ref_get_object;
171171
extern "C" GDExtensionInterfaceRefSetObject gdextension_interface_ref_set_object;
172-
extern "C" GDExtensionInterfaceScriptInstanceCreate2 gdextension_interface_script_instance_create2;
172+
extern "C" GDExtensionInterfaceScriptInstanceCreate3 gdextension_interface_script_instance_create3;
173173
extern "C" GDExtensionInterfacePlaceHolderScriptInstanceCreate gdextension_interface_placeholder_script_instance_create;
174174
extern "C" GDExtensionInterfacePlaceHolderScriptInstanceUpdate gdextension_interface_placeholder_script_instance_update;
175175
extern "C" GDExtensionInterfaceClassdbConstructObject gdextension_interface_classdb_construct_object;

src/godot.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,11 @@ GDExtensionInterfaceObjectGetClassName gdextension_interface_object_get_class_na
171171
GDExtensionInterfaceObjectCastTo gdextension_interface_object_cast_to = nullptr;
172172
GDExtensionInterfaceObjectGetInstanceFromId gdextension_interface_object_get_instance_from_id = nullptr;
173173
GDExtensionInterfaceObjectGetInstanceId gdextension_interface_object_get_instance_id = nullptr;
174-
GDExtensionInterfaceCallableCustomCreate gdextension_interface_callable_custom_create = nullptr;
174+
GDExtensionInterfaceCallableCustomCreate2 gdextension_interface_callable_custom_create2 = nullptr;
175175
GDExtensionInterfaceCallableCustomGetUserData gdextension_interface_callable_custom_get_userdata = nullptr;
176176
GDExtensionInterfaceRefGetObject gdextension_interface_ref_get_object = nullptr;
177177
GDExtensionInterfaceRefSetObject gdextension_interface_ref_set_object = nullptr;
178-
GDExtensionInterfaceScriptInstanceCreate2 gdextension_interface_script_instance_create2 = nullptr;
178+
GDExtensionInterfaceScriptInstanceCreate3 gdextension_interface_script_instance_create3 = nullptr;
179179
GDExtensionInterfacePlaceHolderScriptInstanceCreate gdextension_interface_placeholder_script_instance_create = nullptr;
180180
GDExtensionInterfacePlaceHolderScriptInstanceUpdate gdextension_interface_placeholder_script_instance_update = nullptr;
181181
GDExtensionInterfaceClassdbConstructObject gdextension_interface_classdb_construct_object = nullptr;
@@ -408,11 +408,11 @@ GDExtensionBool GDExtensionBinding::init(GDExtensionInterfaceGetProcAddress p_ge
408408
LOAD_PROC_ADDRESS(object_cast_to, GDExtensionInterfaceObjectCastTo);
409409
LOAD_PROC_ADDRESS(object_get_instance_from_id, GDExtensionInterfaceObjectGetInstanceFromId);
410410
LOAD_PROC_ADDRESS(object_get_instance_id, GDExtensionInterfaceObjectGetInstanceId);
411-
LOAD_PROC_ADDRESS(callable_custom_create, GDExtensionInterfaceCallableCustomCreate);
411+
LOAD_PROC_ADDRESS(callable_custom_create2, GDExtensionInterfaceCallableCustomCreate2);
412412
LOAD_PROC_ADDRESS(callable_custom_get_userdata, GDExtensionInterfaceCallableCustomGetUserData);
413413
LOAD_PROC_ADDRESS(ref_get_object, GDExtensionInterfaceRefGetObject);
414414
LOAD_PROC_ADDRESS(ref_set_object, GDExtensionInterfaceRefSetObject);
415-
LOAD_PROC_ADDRESS(script_instance_create2, GDExtensionInterfaceScriptInstanceCreate2);
415+
LOAD_PROC_ADDRESS(script_instance_create3, GDExtensionInterfaceScriptInstanceCreate3);
416416
LOAD_PROC_ADDRESS(placeholder_script_instance_create, GDExtensionInterfacePlaceHolderScriptInstanceCreate);
417417
LOAD_PROC_ADDRESS(placeholder_script_instance_update, GDExtensionInterfacePlaceHolderScriptInstanceUpdate);
418418
LOAD_PROC_ADDRESS(classdb_construct_object, GDExtensionInterfaceClassdbConstructObject);

src/variant/callable_custom.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ bool CallableCustom::is_valid() const {
9999
}
100100

101101
Callable::Callable(CallableCustom *p_callable_custom) {
102-
GDExtensionCallableCustomInfo info = {};
102+
GDExtensionCallableCustomInfo2 info = {};
103103
info.callable_userdata = p_callable_custom;
104104
info.token = internal::token;
105105
info.object_id = p_callable_custom->get_object();
@@ -112,7 +112,7 @@ Callable::Callable(CallableCustom *p_callable_custom) {
112112
info.to_string_func = &callable_custom_to_string;
113113
info.get_argument_count_func = &custom_callable_get_argument_count_func;
114114

115-
::godot::internal::gdextension_interface_callable_custom_create(_native_ptr(), &info);
115+
::godot::internal::gdextension_interface_callable_custom_create2(_native_ptr(), &info);
116116
}
117117

118118
CallableCustom *Callable::get_custom() const {

src/variant/callable_method_pointer.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ void CallableCustomMethodPointerBase::_setup(uint32_t *p_base_ptr, uint32_t p_pt
9898
namespace internal {
9999

100100
Callable create_callable_from_ccmp(CallableCustomMethodPointerBase *p_callable_method_pointer) {
101-
GDExtensionCallableCustomInfo info = {};
101+
GDExtensionCallableCustomInfo2 info = {};
102102
info.callable_userdata = p_callable_method_pointer;
103103
info.token = internal::token;
104104
info.object_id = p_callable_method_pointer->get_object();
@@ -111,7 +111,7 @@ Callable create_callable_from_ccmp(CallableCustomMethodPointerBase *p_callable_m
111111
info.get_argument_count_func = &custom_callable_mp_get_argument_count_func;
112112

113113
Callable callable;
114-
::godot::internal::gdextension_interface_callable_custom_create(callable._native_ptr(), &info);
114+
::godot::internal::gdextension_interface_callable_custom_create2(callable._native_ptr(), &info);
115115
return callable;
116116
}
117117

0 commit comments

Comments
 (0)