Skip to content

Commit bb54c12

Browse files
committed
Update to load function pointers for GDExtension interface
1 parent feaba55 commit bb54c12

File tree

6 files changed

+536
-219
lines changed

6 files changed

+536
-219
lines changed

gdextension/gdextension_interface.h

Lines changed: 200 additions & 205 deletions
Large diffs are not rendered by default.

include/godot_cpp/godot.hpp

Lines changed: 165 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,167 @@
3535

3636
namespace godot {
3737

38+
struct GDExtensionInterface {
39+
GDExtensionGodotVersion godot_version;
40+
41+
GDExtensionInterfaceGetGodotVersion get_godot_version;
42+
43+
GDExtensionInterfaceMemAlloc mem_alloc;
44+
GDExtensionInterfaceMemRealloc mem_realloc;
45+
GDExtensionInterfaceMemFree mem_free;
46+
47+
GDExtensionInterfacePrintError print_error;
48+
GDExtensionInterfacePrintErrorWithMessage print_error_with_message;
49+
GDExtensionInterfacePrintWarning print_warning;
50+
GDExtensionInterfacePrintWarningWithMessage print_warning_with_message;
51+
GDExtensionInterfacePrintScriptError print_script_error;
52+
GDExtensionInterfacePrintScriptErrorWithMessage print_script_error_with_message;
53+
54+
GDExtensionInterfaceGetNativeStructSize get_native_struct_size;
55+
56+
GDExtensionInterfaceVariantNewCopy variant_new_copy;
57+
GDExtensionInterfaceVariantNewNil variant_new_nil;
58+
GDExtensionInterfaceVariantDestroy variant_destroy;
59+
60+
GDExtensionInterfaceVariantCall variant_call;
61+
GDExtensionInterfaceVariantCallStatic variant_call_static;
62+
GDExtensionInterfaceVariantEvaluate variant_evaluate;
63+
GDExtensionInterfaceVariantSet variant_set;
64+
GDExtensionInterfaceVariantSetNamed variant_set_named;
65+
GDExtensionInterfaceVariantSetKeyed variant_set_keyed;
66+
GDExtensionInterfaceVariantSetIndexed variant_set_indexed;
67+
GDExtensionInterfaceVariantGet variant_get;
68+
GDExtensionInterfaceVariantGetNamed variant_get_named;
69+
GDExtensionInterfaceVariantGetKeyed variant_get_keyed;
70+
GDExtensionInterfaceVariantGetIndexed variant_get_indexed;
71+
GDExtensionInterfaceVariantIterInit variant_iter_init;
72+
GDExtensionInterfaceVariantIterNext variant_iter_next;
73+
GDExtensionInterfaceVariantIterGet variant_iter_get;
74+
GDExtensionInterfaceVariantHash variant_hash;
75+
GDExtensionInterfaceVariantRecursiveHash variant_recursive_hash;
76+
GDExtensionInterfaceVariantHashCompare variant_hash_compare;
77+
GDExtensionInterfaceVariantBooleanize variant_booleanize;
78+
GDExtensionInterfaceVariantDuplicate variant_duplicate;
79+
GDExtensionInterfaceVariantStringify variant_stringify;
80+
81+
GDExtensionInterfaceVariantGetType variant_get_type;
82+
GDExtensionInterfaceVariantHasMethod variant_has_method;
83+
GDExtensionInterfaceVariantHasMember variant_has_member;
84+
GDExtensionInterfaceVariantHasKey variant_has_key;
85+
GDExtensionInterfaceVariantGetTypeName variant_get_type_name;
86+
GDExtensionInterfaceVariantCanConvert variant_can_convert;
87+
GDExtensionInterfaceVariantCanConvertStrict variant_can_convert_strict;
88+
89+
GDExtensionInterfaceGetVariantFromTypeConstructor get_variant_from_type_constructor;
90+
GDExtensionInterfaceGetVariantToTypeConstructor get_variant_to_type_constructor;
91+
GDExtensionInterfaceVariantGetPtrOperatorEvaluator variant_get_ptr_operator_evaluator;
92+
GDExtensionInterfaceVariantGetPtrBuiltinMethod variant_get_ptr_builtin_method;
93+
GDExtensionInterfaceVariantGetPtrConstructor variant_get_ptr_constructor;
94+
GDExtensionInterfaceVariantGetPtrDestructor variant_get_ptr_destructor;
95+
GDExtensionInterfaceVariantConstruct variant_construct;
96+
GDExtensionInterfaceVariantGetPtrSetter variant_get_ptr_setter;
97+
GDExtensionInterfaceVariantGetPtrGetter variant_get_ptr_getter;
98+
GDExtensionInterfaceVariantGetPtrIndexedSetter variant_get_ptr_indexed_setter;
99+
GDExtensionInterfaceVariantGetPtrIndexedGetter variant_get_ptr_indexed_getter;
100+
GDExtensionInterfaceVariantGetPtrKeyedSetter variant_get_ptr_keyed_setter;
101+
GDExtensionInterfaceVariantGetPtrKeyedGetter variant_get_ptr_keyed_getter;
102+
GDExtensionInterfaceVariantGetPtrKeyedChecker variant_get_ptr_keyed_checker;
103+
GDExtensionInterfaceVariantGetConstantValue variant_get_constant_value;
104+
GDExtensionInterfaceVariantGetPtrUtilityFunction variant_get_ptr_utility_function;
105+
106+
GDExtensionInterfaceStringNewWithLatin1Chars string_new_with_latin1_chars;
107+
GDExtensionInterfaceStringNewWithUtf8Chars string_new_with_utf8_chars;
108+
GDExtensionInterfaceStringNewWithUtf16Chars string_new_with_utf16_chars;
109+
GDExtensionInterfaceStringNewWithUtf32Chars string_new_with_utf32_chars;
110+
GDExtensionInterfaceStringNewWithWideChars string_new_with_wide_chars;
111+
GDExtensionInterfaceStringNewWithLatin1CharsAndLen string_new_with_latin1_chars_and_len;
112+
GDExtensionInterfaceStringNewWithUtf8CharsAndLen string_new_with_utf8_chars_and_len;
113+
GDExtensionInterfaceStringNewWithUtf16CharsAndLen string_new_with_utf16_chars_and_len;
114+
GDExtensionInterfaceStringNewWithUtf32CharsAndLen string_new_with_utf32_chars_and_len;
115+
GDExtensionInterfaceStringNewWithWideCharsAndLen string_new_with_wide_chars_and_len;
116+
GDExtensionInterfaceStringToLatin1Chars string_to_latin1_chars;
117+
GDExtensionInterfaceStringToUtf8Chars string_to_utf8_chars;
118+
GDExtensionInterfaceStringToUtf16Chars string_to_utf16_chars;
119+
GDExtensionInterfaceStringToUtf32Chars string_to_utf32_chars;
120+
GDExtensionInterfaceStringToWideChars string_to_wide_chars;
121+
GDExtensionInterfaceStringOperatorIndex string_operator_index;
122+
GDExtensionInterfaceStringOperatorIndexConst string_operator_index_const;
123+
124+
GDExtensionInterfaceStringOperatorPlusEqString string_operator_plus_eq_string;
125+
GDExtensionInterfaceStringOperatorPlusEqChar string_operator_plus_eq_char;
126+
GDExtensionInterfaceStringOperatorPlusEqCstr string_operator_plus_eq_cstr;
127+
GDExtensionInterfaceStringOperatorPlusEqWcstr string_operator_plus_eq_wcstr;
128+
GDExtensionInterfaceStringOperatorPlusEqC32str string_operator_plus_eq_c32str;
129+
130+
GDExtensionInterfaceXmlParserOpenBuffer xml_parser_open_buffer;
131+
132+
GDExtensionInterfaceFileAccessStoreBuffer file_access_store_buffer;
133+
GDExtensionInterfaceFileAccessGetBuffer file_access_get_buffer;
134+
135+
GDExtensionInterfaceWorkerThreadPoolAddNativeGroupTask worker_thread_pool_add_native_group_task;
136+
GDExtensionInterfaceWorkerThreadPoolAddNativeTask worker_thread_pool_add_native_task;
137+
138+
GDExtensionInterfacePackedByteArrayOperatorIndex packed_byte_array_operator_index;
139+
GDExtensionInterfacePackedByteArrayOperatorIndexConst packed_byte_array_operator_index_const;
140+
GDExtensionInterfacePackedColorArrayOperatorIndex packed_color_array_operator_index;
141+
GDExtensionInterfacePackedColorArrayOperatorIndexConst packed_color_array_operator_index_const;
142+
GDExtensionInterfacePackedFloat32ArrayOperatorIndex packed_float32_array_operator_index;
143+
GDExtensionInterfacePackedFloat32ArrayOperatorIndexConst packed_float32_array_operator_index_const;
144+
GDExtensionInterfacePackedFloat64ArrayOperatorIndex packed_float64_array_operator_index;
145+
GDExtensionInterfacePackedFloat64ArrayOperatorIndexConst packed_float64_array_operator_index_const;
146+
GDExtensionInterfacePackedInt32ArrayOperatorIndex packed_int32_array_operator_index;
147+
GDExtensionInterfacePackedInt32ArrayOperatorIndexConst packed_int32_array_operator_index_const;
148+
GDExtensionInterfacePackedInt64ArrayOperatorIndex packed_int64_array_operator_index;
149+
GDExtensionInterfacePackedInt64ArrayOperatorIndexConst packed_int64_array_operator_index_const;
150+
GDExtensionInterfacePackedStringArrayOperatorIndex packed_string_array_operator_index;
151+
GDExtensionInterfacePackedStringArrayOperatorIndexConst packed_string_array_operator_index_const;
152+
GDExtensionInterfacePackedVector2ArrayOperatorIndex packed_vector2_array_operator_index;
153+
GDExtensionInterfacePackedVector2ArrayOperatorIndexConst packed_vector2_array_operator_index_const;
154+
GDExtensionInterfacePackedVector3ArrayOperatorIndex packed_vector3_array_operator_index;
155+
GDExtensionInterfacePackedVector3ArrayOperatorIndexConst packed_vector3_array_operator_index_const;
156+
GDExtensionInterfaceArrayOperatorIndex array_operator_index;
157+
GDExtensionInterfaceArrayOperatorIndexConst array_operator_index_const;
158+
GDExtensionInterfaceArrayRef array_ref;
159+
GDExtensionInterfaceArraySetTyped array_set_typed;
160+
161+
GDExtensionInterfaceDictionaryOperatorIndex dictionary_operator_index;
162+
GDExtensionInterfaceDictionaryOperatorIndexConst dictionary_operator_index_const;
163+
164+
GDExtensionInterfaceObjectMethodBindCall object_method_bind_call;
165+
GDExtensionInterfaceObjectMethodBindPtrcall object_method_bind_ptrcall;
166+
GDExtensionInterfaceObjectDestroy object_destroy;
167+
GDExtensionInterfaceGlobalGetSingleton global_get_singleton;
168+
GDExtensionInterfaceObjectGetInstanceBinding object_get_instance_binding;
169+
GDExtensionInterfaceObjectSetInstanceBinding object_set_instance_binding;
170+
GDExtensionInterfaceObjectSetInstance object_set_instance;
171+
GDExtensionInterfaceObjectCastTo object_cast_to;
172+
GDExtensionInterfaceObjectGetInstanceFromId object_get_instance_from_id;
173+
GDExtensionInterfaceObjectGetInstanceId object_get_instance_id;
174+
175+
GDExtensionInterfaceRefGetObject ref_get_object;
176+
GDExtensionInterfaceRefSetObject ref_set_object;
177+
178+
GDExtensionInterfaceScriptInstanceCreate script_instance_create;
179+
180+
GDExtensionInterfaceClassdbConstructObject classdb_construct_object;
181+
GDExtensionInterfaceClassdbGetMethodBind classdb_get_method_bind;
182+
GDExtensionInterfaceClassdbGetClassTag classdb_get_class_tag;
183+
184+
GDExtensionInterfaceClassdbRegisterExtensionClass classdb_register_extension_class;
185+
GDExtensionInterfaceClassdbRegisterExtensionClassMethod classdb_register_extension_class_method;
186+
GDExtensionInterfaceClassdbRegisterExtensionClassIntegerConstant classdb_register_extension_class_integer_constant;
187+
GDExtensionInterfaceClassdbRegisterExtensionClassProperty classdb_register_extension_class_property;
188+
GDExtensionInterfaceClassdbRegisterExtensionClassPropertyGroup classdb_register_extension_class_property_group;
189+
GDExtensionInterfaceClassdbRegisterExtensionClassPropertySubgroup classdb_register_extension_class_property_subgroup;
190+
GDExtensionInterfaceClassdbRegisterExtensionClassSignal classdb_register_extension_class_signal;
191+
GDExtensionInterfaceClassdbUnregisterExtensionClass classdb_unregister_extension_class;
192+
193+
GDExtensionInterfaceGetLibraryPath get_library_path;
194+
};
195+
38196
namespace internal {
39197

40-
extern "C" const GDExtensionInterface *gde_interface;
198+
extern "C" GDExtensionInterface *gde_interface;
41199
extern "C" GDExtensionClassLibraryPtr library;
42200
extern "C" void *token;
43201

@@ -51,28 +209,28 @@ enum ModuleInitializationLevel {
51209
};
52210

53211
class GDExtensionBinding {
212+
private:
213+
static GDExtensionInterface gdextension_interface;
214+
54215
public:
55216
using Callback = void (*)(ModuleInitializationLevel p_level);
56217

57218
static Callback init_callback;
58219
static Callback terminate_callback;
59220
static GDExtensionInitializationLevel minimum_initialization_level;
60-
static GDExtensionBool init(const GDExtensionInterface *p_interface, GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization);
221+
static GDExtensionBool init(GDExtensionInterfaceGetProcAddress p_get_proc_address, GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization);
61222

62223
public:
63224
static void initialize_level(void *userdata, GDExtensionInitializationLevel p_level);
64225
static void deinitialize_level(void *userdata, GDExtensionInitializationLevel p_level);
65226

66227
class InitObject {
67-
const GDExtensionInterface *gde_interface;
228+
GDExtensionInterfaceGetProcAddress get_proc_address;
68229
GDExtensionClassLibraryPtr library;
69230
GDExtensionInitialization *initialization;
70231

71232
public:
72-
InitObject(const GDExtensionInterface *p_interface, GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization) :
73-
gde_interface(p_interface),
74-
library(p_library),
75-
initialization(r_initialization) {}
233+
InitObject(GDExtensionInterfaceGetProcAddress p_get_proc_address, GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization);
76234

77235
void register_initializer(Callback p_init) const;
78236
void register_terminator(Callback p_init) const;

0 commit comments

Comments
 (0)