2023-01-05 13:25:55 +01:00
/**************************************************************************/
/* gdextension_interface.h */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* https://godotengine.org */
/**************************************************************************/
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/
2022-12-07 12:11:28 +01:00
# ifndef GDEXTENSION_INTERFACE_H
# define GDEXTENSION_INTERFACE_H
/* This is a C class header, you can copy it and use it directly in your own binders.
* Together with the JSON file , you should be able to generate any binder .
*/
# include <stddef.h>
# include <stdint.h>
# ifndef __cplusplus
typedef uint32_t char32_t ;
typedef uint16_t char16_t ;
# endif
# ifdef __cplusplus
extern " C " {
# endif
/* VARIANT TYPES */
typedef enum {
GDEXTENSION_VARIANT_TYPE_NIL ,
/* atomic types */
GDEXTENSION_VARIANT_TYPE_BOOL ,
GDEXTENSION_VARIANT_TYPE_INT ,
GDEXTENSION_VARIANT_TYPE_FLOAT ,
GDEXTENSION_VARIANT_TYPE_STRING ,
/* math types */
GDEXTENSION_VARIANT_TYPE_VECTOR2 ,
GDEXTENSION_VARIANT_TYPE_VECTOR2I ,
GDEXTENSION_VARIANT_TYPE_RECT2 ,
GDEXTENSION_VARIANT_TYPE_RECT2I ,
GDEXTENSION_VARIANT_TYPE_VECTOR3 ,
GDEXTENSION_VARIANT_TYPE_VECTOR3I ,
GDEXTENSION_VARIANT_TYPE_TRANSFORM2D ,
GDEXTENSION_VARIANT_TYPE_VECTOR4 ,
GDEXTENSION_VARIANT_TYPE_VECTOR4I ,
GDEXTENSION_VARIANT_TYPE_PLANE ,
GDEXTENSION_VARIANT_TYPE_QUATERNION ,
GDEXTENSION_VARIANT_TYPE_AABB ,
GDEXTENSION_VARIANT_TYPE_BASIS ,
GDEXTENSION_VARIANT_TYPE_TRANSFORM3D ,
GDEXTENSION_VARIANT_TYPE_PROJECTION ,
/* misc types */
GDEXTENSION_VARIANT_TYPE_COLOR ,
GDEXTENSION_VARIANT_TYPE_STRING_NAME ,
GDEXTENSION_VARIANT_TYPE_NODE_PATH ,
GDEXTENSION_VARIANT_TYPE_RID ,
GDEXTENSION_VARIANT_TYPE_OBJECT ,
GDEXTENSION_VARIANT_TYPE_CALLABLE ,
GDEXTENSION_VARIANT_TYPE_SIGNAL ,
GDEXTENSION_VARIANT_TYPE_DICTIONARY ,
GDEXTENSION_VARIANT_TYPE_ARRAY ,
/* typed arrays */
GDEXTENSION_VARIANT_TYPE_PACKED_BYTE_ARRAY ,
GDEXTENSION_VARIANT_TYPE_PACKED_INT32_ARRAY ,
GDEXTENSION_VARIANT_TYPE_PACKED_INT64_ARRAY ,
GDEXTENSION_VARIANT_TYPE_PACKED_FLOAT32_ARRAY ,
GDEXTENSION_VARIANT_TYPE_PACKED_FLOAT64_ARRAY ,
GDEXTENSION_VARIANT_TYPE_PACKED_STRING_ARRAY ,
GDEXTENSION_VARIANT_TYPE_PACKED_VECTOR2_ARRAY ,
GDEXTENSION_VARIANT_TYPE_PACKED_VECTOR3_ARRAY ,
GDEXTENSION_VARIANT_TYPE_PACKED_COLOR_ARRAY ,
GDEXTENSION_VARIANT_TYPE_VARIANT_MAX
} GDExtensionVariantType ;
typedef enum {
/* comparison */
GDEXTENSION_VARIANT_OP_EQUAL ,
GDEXTENSION_VARIANT_OP_NOT_EQUAL ,
GDEXTENSION_VARIANT_OP_LESS ,
GDEXTENSION_VARIANT_OP_LESS_EQUAL ,
GDEXTENSION_VARIANT_OP_GREATER ,
GDEXTENSION_VARIANT_OP_GREATER_EQUAL ,
/* mathematic */
GDEXTENSION_VARIANT_OP_ADD ,
GDEXTENSION_VARIANT_OP_SUBTRACT ,
GDEXTENSION_VARIANT_OP_MULTIPLY ,
GDEXTENSION_VARIANT_OP_DIVIDE ,
GDEXTENSION_VARIANT_OP_NEGATE ,
GDEXTENSION_VARIANT_OP_POSITIVE ,
GDEXTENSION_VARIANT_OP_MODULE ,
GDEXTENSION_VARIANT_OP_POWER ,
/* bitwise */
GDEXTENSION_VARIANT_OP_SHIFT_LEFT ,
GDEXTENSION_VARIANT_OP_SHIFT_RIGHT ,
GDEXTENSION_VARIANT_OP_BIT_AND ,
GDEXTENSION_VARIANT_OP_BIT_OR ,
GDEXTENSION_VARIANT_OP_BIT_XOR ,
GDEXTENSION_VARIANT_OP_BIT_NEGATE ,
/* logic */
GDEXTENSION_VARIANT_OP_AND ,
GDEXTENSION_VARIANT_OP_OR ,
GDEXTENSION_VARIANT_OP_XOR ,
GDEXTENSION_VARIANT_OP_NOT ,
/* containment */
GDEXTENSION_VARIANT_OP_IN ,
GDEXTENSION_VARIANT_OP_MAX
} GDExtensionVariantOperator ;
2023-05-13 19:05:54 +02:00
// In this API there are multiple functions which expect the caller to pass a pointer
// on return value as parameter.
// In order to make it clear if the caller should initialize the return value or not
// we have two flavor of types:
// - `GDExtensionXXXPtr` for pointer on an initialized value
// - `GDExtensionUninitializedXXXPtr` for pointer on uninitialized value
//
// Notes:
// - Not respecting those requirements can seems harmless, but will lead to unexpected
// segfault or memory leak (for instance with a specific compiler/OS, or when two
// native extensions start doing ptrcall on each other).
// - Initialization must be done with the function pointer returned by `variant_get_ptr_constructor`,
// zero-initializing the variable should not be considered a valid initialization method here !
// - Some types have no destructor (see `extension_api.json`'s `has_destructor` field), for
// them it is always safe to skip the constructor for the return value if you are in a hurry ;-)
2022-12-07 12:11:28 +01:00
typedef void * GDExtensionVariantPtr ;
typedef const void * GDExtensionConstVariantPtr ;
2023-05-13 19:05:54 +02:00
typedef void * GDExtensionUninitializedVariantPtr ;
2022-12-07 12:11:28 +01:00
typedef void * GDExtensionStringNamePtr ;
typedef const void * GDExtensionConstStringNamePtr ;
2023-05-13 19:05:54 +02:00
typedef void * GDExtensionUninitializedStringNamePtr ;
2022-12-07 12:11:28 +01:00
typedef void * GDExtensionStringPtr ;
typedef const void * GDExtensionConstStringPtr ;
2023-05-13 19:05:54 +02:00
typedef void * GDExtensionUninitializedStringPtr ;
2022-12-07 12:11:28 +01:00
typedef void * GDExtensionObjectPtr ;
typedef const void * GDExtensionConstObjectPtr ;
2023-05-13 19:05:54 +02:00
typedef void * GDExtensionUninitializedObjectPtr ;
2022-12-07 12:11:28 +01:00
typedef void * GDExtensionTypePtr ;
typedef const void * GDExtensionConstTypePtr ;
2023-05-13 19:05:54 +02:00
typedef void * GDExtensionUninitializedTypePtr ;
2022-12-07 12:11:28 +01:00
typedef const void * GDExtensionMethodBindPtr ;
typedef int64_t GDExtensionInt ;
typedef uint8_t GDExtensionBool ;
typedef uint64_t GDObjectInstanceID ;
2022-12-11 11:31:01 +01:00
typedef void * GDExtensionRefPtr ;
typedef const void * GDExtensionConstRefPtr ;
2022-12-07 12:11:28 +01:00
/* VARIANT DATA I/O */
typedef enum {
GDEXTENSION_CALL_OK ,
GDEXTENSION_CALL_ERROR_INVALID_METHOD ,
GDEXTENSION_CALL_ERROR_INVALID_ARGUMENT , // Expected a different variant type.
GDEXTENSION_CALL_ERROR_TOO_MANY_ARGUMENTS , // Expected lower number of arguments.
GDEXTENSION_CALL_ERROR_TOO_FEW_ARGUMENTS , // Expected higher number of arguments.
GDEXTENSION_CALL_ERROR_INSTANCE_IS_NULL ,
GDEXTENSION_CALL_ERROR_METHOD_NOT_CONST , // Used for const call.
} GDExtensionCallErrorType ;
typedef struct {
GDExtensionCallErrorType error ;
int32_t argument ;
int32_t expected ;
} GDExtensionCallError ;
2023-06-18 23:14:10 +02:00
typedef void ( * GDExtensionVariantFromTypeConstructorFunc ) ( GDExtensionUninitializedVariantPtr , GDExtensionTypePtr ) ;
typedef void ( * GDExtensionTypeFromVariantConstructorFunc ) ( GDExtensionUninitializedTypePtr , GDExtensionVariantPtr ) ;
2022-12-07 12:11:28 +01:00
typedef void ( * GDExtensionPtrOperatorEvaluator ) ( GDExtensionConstTypePtr p_left , GDExtensionConstTypePtr p_right , GDExtensionTypePtr r_result ) ;
2022-12-14 18:24:35 +01:00
typedef void ( * GDExtensionPtrBuiltInMethod ) ( GDExtensionTypePtr p_base , const GDExtensionConstTypePtr * p_args , GDExtensionTypePtr r_return , int p_argument_count ) ;
2023-06-18 23:14:10 +02:00
typedef void ( * GDExtensionPtrConstructor ) ( GDExtensionUninitializedTypePtr p_base , const GDExtensionConstTypePtr * p_args ) ;
2022-12-07 12:11:28 +01:00
typedef void ( * GDExtensionPtrDestructor ) ( GDExtensionTypePtr p_base ) ;
typedef void ( * GDExtensionPtrSetter ) ( GDExtensionTypePtr p_base , GDExtensionConstTypePtr p_value ) ;
typedef void ( * GDExtensionPtrGetter ) ( GDExtensionConstTypePtr p_base , GDExtensionTypePtr r_value ) ;
typedef void ( * GDExtensionPtrIndexedSetter ) ( GDExtensionTypePtr p_base , GDExtensionInt p_index , GDExtensionConstTypePtr p_value ) ;
typedef void ( * GDExtensionPtrIndexedGetter ) ( GDExtensionConstTypePtr p_base , GDExtensionInt p_index , GDExtensionTypePtr r_value ) ;
typedef void ( * GDExtensionPtrKeyedSetter ) ( GDExtensionTypePtr p_base , GDExtensionConstTypePtr p_key , GDExtensionConstTypePtr p_value ) ;
typedef void ( * GDExtensionPtrKeyedGetter ) ( GDExtensionConstTypePtr p_base , GDExtensionConstTypePtr p_key , GDExtensionTypePtr r_value ) ;
typedef uint32_t ( * GDExtensionPtrKeyedChecker ) ( GDExtensionConstVariantPtr p_base , GDExtensionConstVariantPtr p_key ) ;
2022-12-14 18:24:35 +01:00
typedef void ( * GDExtensionPtrUtilityFunction ) ( GDExtensionTypePtr r_return , const GDExtensionConstTypePtr * p_args , int p_argument_count ) ;
2022-12-07 12:11:28 +01:00
typedef GDExtensionObjectPtr ( * GDExtensionClassConstructor ) ( ) ;
typedef void * ( * GDExtensionInstanceBindingCreateCallback ) ( void * p_token , void * p_instance ) ;
typedef void ( * GDExtensionInstanceBindingFreeCallback ) ( void * p_token , void * p_instance , void * p_binding ) ;
typedef GDExtensionBool ( * GDExtensionInstanceBindingReferenceCallback ) ( void * p_token , void * p_binding , GDExtensionBool p_reference ) ;
typedef struct {
GDExtensionInstanceBindingCreateCallback create_callback ;
GDExtensionInstanceBindingFreeCallback free_callback ;
GDExtensionInstanceBindingReferenceCallback reference_callback ;
} GDExtensionInstanceBindingCallbacks ;
/* EXTENSION CLASSES */
typedef void * GDExtensionClassInstancePtr ;
typedef GDExtensionBool ( * GDExtensionClassSet ) ( GDExtensionClassInstancePtr p_instance , GDExtensionConstStringNamePtr p_name , GDExtensionConstVariantPtr p_value ) ;
typedef GDExtensionBool ( * GDExtensionClassGet ) ( GDExtensionClassInstancePtr p_instance , GDExtensionConstStringNamePtr p_name , GDExtensionVariantPtr r_ret ) ;
typedef uint64_t ( * GDExtensionClassGetRID ) ( GDExtensionClassInstancePtr p_instance ) ;
typedef struct {
GDExtensionVariantType type ;
GDExtensionStringNamePtr name ;
GDExtensionStringNamePtr class_name ;
uint32_t hint ; // Bitfield of `PropertyHint` (defined in `extension_api.json`).
GDExtensionStringPtr hint_string ;
uint32_t usage ; // Bitfield of `PropertyUsageFlags` (defined in `extension_api.json`).
} GDExtensionPropertyInfo ;
typedef struct {
GDExtensionStringNamePtr name ;
GDExtensionPropertyInfo return_value ;
uint32_t flags ; // Bitfield of `GDExtensionClassMethodFlags`.
int32_t id ;
/* Arguments: `default_arguments` is an array of size `argument_count`. */
uint32_t argument_count ;
GDExtensionPropertyInfo * arguments ;
/* Default arguments: `default_arguments` is an array of size `default_argument_count`. */
uint32_t default_argument_count ;
GDExtensionVariantPtr * default_arguments ;
} GDExtensionMethodInfo ;
typedef const GDExtensionPropertyInfo * ( * GDExtensionClassGetPropertyList ) ( GDExtensionClassInstancePtr p_instance , uint32_t * r_count ) ;
typedef void ( * GDExtensionClassFreePropertyList ) ( GDExtensionClassInstancePtr p_instance , const GDExtensionPropertyInfo * p_list ) ;
typedef GDExtensionBool ( * GDExtensionClassPropertyCanRevert ) ( GDExtensionClassInstancePtr p_instance , GDExtensionConstStringNamePtr p_name ) ;
typedef GDExtensionBool ( * GDExtensionClassPropertyGetRevert ) ( GDExtensionClassInstancePtr p_instance , GDExtensionConstStringNamePtr p_name , GDExtensionVariantPtr r_ret ) ;
typedef void ( * GDExtensionClassNotification ) ( GDExtensionClassInstancePtr p_instance , int32_t p_what ) ;
typedef void ( * GDExtensionClassToString ) ( GDExtensionClassInstancePtr p_instance , GDExtensionBool * r_is_valid , GDExtensionStringPtr p_out ) ;
typedef void ( * GDExtensionClassReference ) ( GDExtensionClassInstancePtr p_instance ) ;
typedef void ( * GDExtensionClassUnreference ) ( GDExtensionClassInstancePtr p_instance ) ;
2022-12-14 18:24:35 +01:00
typedef void ( * GDExtensionClassCallVirtual ) ( GDExtensionClassInstancePtr p_instance , const GDExtensionConstTypePtr * p_args , GDExtensionTypePtr r_ret ) ;
2022-12-07 12:11:28 +01:00
typedef GDExtensionObjectPtr ( * GDExtensionClassCreateInstance ) ( void * p_userdata ) ;
typedef void ( * GDExtensionClassFreeInstance ) ( void * p_userdata , GDExtensionClassInstancePtr p_instance ) ;
typedef GDExtensionClassCallVirtual ( * GDExtensionClassGetVirtual ) ( void * p_userdata , GDExtensionConstStringNamePtr p_name ) ;
typedef struct {
GDExtensionBool is_virtual ;
GDExtensionBool is_abstract ;
GDExtensionClassSet set_func ;
GDExtensionClassGet get_func ;
GDExtensionClassGetPropertyList get_property_list_func ;
GDExtensionClassFreePropertyList free_property_list_func ;
GDExtensionClassPropertyCanRevert property_can_revert_func ;
GDExtensionClassPropertyGetRevert property_get_revert_func ;
GDExtensionClassNotification notification_func ;
GDExtensionClassToString to_string_func ;
GDExtensionClassReference reference_func ;
GDExtensionClassUnreference unreference_func ;
GDExtensionClassCreateInstance create_instance_func ; // (Default) constructor; mandatory. If the class is not instantiable, consider making it virtual or abstract.
GDExtensionClassFreeInstance free_instance_func ; // Destructor; mandatory.
GDExtensionClassGetVirtual get_virtual_func ; // Queries a virtual function by name and returns a callback to invoke the requested virtual function.
GDExtensionClassGetRID get_rid_func ;
void * class_userdata ; // Per-class user data, later accessible in instance bindings.
} GDExtensionClassCreationInfo ;
typedef void * GDExtensionClassLibraryPtr ;
/* Method */
typedef enum {
GDEXTENSION_METHOD_FLAG_NORMAL = 1 ,
GDEXTENSION_METHOD_FLAG_EDITOR = 2 ,
GDEXTENSION_METHOD_FLAG_CONST = 4 ,
GDEXTENSION_METHOD_FLAG_VIRTUAL = 8 ,
GDEXTENSION_METHOD_FLAG_VARARG = 16 ,
GDEXTENSION_METHOD_FLAG_STATIC = 32 ,
GDEXTENSION_METHOD_FLAGS_DEFAULT = GDEXTENSION_METHOD_FLAG_NORMAL ,
} GDExtensionClassMethodFlags ;
typedef enum {
GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE ,
GDEXTENSION_METHOD_ARGUMENT_METADATA_INT_IS_INT8 ,
GDEXTENSION_METHOD_ARGUMENT_METADATA_INT_IS_INT16 ,
GDEXTENSION_METHOD_ARGUMENT_METADATA_INT_IS_INT32 ,
GDEXTENSION_METHOD_ARGUMENT_METADATA_INT_IS_INT64 ,
GDEXTENSION_METHOD_ARGUMENT_METADATA_INT_IS_UINT8 ,
GDEXTENSION_METHOD_ARGUMENT_METADATA_INT_IS_UINT16 ,
GDEXTENSION_METHOD_ARGUMENT_METADATA_INT_IS_UINT32 ,
GDEXTENSION_METHOD_ARGUMENT_METADATA_INT_IS_UINT64 ,
GDEXTENSION_METHOD_ARGUMENT_METADATA_REAL_IS_FLOAT ,
GDEXTENSION_METHOD_ARGUMENT_METADATA_REAL_IS_DOUBLE
} GDExtensionClassMethodArgumentMetadata ;
2022-12-14 18:24:35 +01:00
typedef void ( * GDExtensionClassMethodCall ) ( void * method_userdata , GDExtensionClassInstancePtr p_instance , const GDExtensionConstVariantPtr * p_args , GDExtensionInt p_argument_count , GDExtensionVariantPtr r_return , GDExtensionCallError * r_error ) ;
2023-04-25 00:21:32 +02:00
typedef void ( * GDExtensionClassMethodValidatedCall ) ( void * method_userdata , GDExtensionClassInstancePtr p_instance , const GDExtensionConstVariantPtr * p_args , GDExtensionVariantPtr r_return ) ;
2022-12-14 18:24:35 +01:00
typedef void ( * GDExtensionClassMethodPtrCall ) ( void * method_userdata , GDExtensionClassInstancePtr p_instance , const GDExtensionConstTypePtr * p_args , GDExtensionTypePtr r_ret ) ;
2022-12-07 12:11:28 +01:00
typedef struct {
GDExtensionStringNamePtr name ;
void * method_userdata ;
GDExtensionClassMethodCall call_func ;
GDExtensionClassMethodPtrCall ptrcall_func ;
uint32_t method_flags ; // Bitfield of `GDExtensionClassMethodFlags`.
/* If `has_return_value` is false, `return_value_info` and `return_value_metadata` are ignored. */
GDExtensionBool has_return_value ;
GDExtensionPropertyInfo * return_value_info ;
GDExtensionClassMethodArgumentMetadata return_value_metadata ;
/* Arguments: `arguments_info` and `arguments_metadata` are array of size `argument_count`.
* Name and hint information for the argument can be omitted in release builds . Class name should always be present if it applies .
*/
uint32_t argument_count ;
GDExtensionPropertyInfo * arguments_info ;
GDExtensionClassMethodArgumentMetadata * arguments_metadata ;
/* Default arguments: `default_arguments` is an array of size `default_argument_count`. */
uint32_t default_argument_count ;
GDExtensionVariantPtr * default_arguments ;
} GDExtensionClassMethodInfo ;
/* SCRIPT INSTANCE EXTENSION */
typedef void * GDExtensionScriptInstanceDataPtr ; // Pointer to custom ScriptInstance native implementation.
typedef GDExtensionBool ( * GDExtensionScriptInstanceSet ) ( GDExtensionScriptInstanceDataPtr p_instance , GDExtensionConstStringNamePtr p_name , GDExtensionConstVariantPtr p_value ) ;
typedef GDExtensionBool ( * GDExtensionScriptInstanceGet ) ( GDExtensionScriptInstanceDataPtr p_instance , GDExtensionConstStringNamePtr p_name , GDExtensionVariantPtr r_ret ) ;
typedef const GDExtensionPropertyInfo * ( * GDExtensionScriptInstanceGetPropertyList ) ( GDExtensionScriptInstanceDataPtr p_instance , uint32_t * r_count ) ;
typedef void ( * GDExtensionScriptInstanceFreePropertyList ) ( GDExtensionScriptInstanceDataPtr p_instance , const GDExtensionPropertyInfo * p_list ) ;
typedef GDExtensionVariantType ( * GDExtensionScriptInstanceGetPropertyType ) ( GDExtensionScriptInstanceDataPtr p_instance , GDExtensionConstStringNamePtr p_name , GDExtensionBool * r_is_valid ) ;
typedef GDExtensionBool ( * GDExtensionScriptInstancePropertyCanRevert ) ( GDExtensionScriptInstanceDataPtr p_instance , GDExtensionConstStringNamePtr p_name ) ;
typedef GDExtensionBool ( * GDExtensionScriptInstancePropertyGetRevert ) ( GDExtensionScriptInstanceDataPtr p_instance , GDExtensionConstStringNamePtr p_name , GDExtensionVariantPtr r_ret ) ;
typedef GDExtensionObjectPtr ( * GDExtensionScriptInstanceGetOwner ) ( GDExtensionScriptInstanceDataPtr p_instance ) ;
typedef void ( * GDExtensionScriptInstancePropertyStateAdd ) ( GDExtensionConstStringNamePtr p_name , GDExtensionConstVariantPtr p_value , void * p_userdata ) ;
typedef void ( * GDExtensionScriptInstanceGetPropertyState ) ( GDExtensionScriptInstanceDataPtr p_instance , GDExtensionScriptInstancePropertyStateAdd p_add_func , void * p_userdata ) ;
typedef const GDExtensionMethodInfo * ( * GDExtensionScriptInstanceGetMethodList ) ( GDExtensionScriptInstanceDataPtr p_instance , uint32_t * r_count ) ;
typedef void ( * GDExtensionScriptInstanceFreeMethodList ) ( GDExtensionScriptInstanceDataPtr p_instance , const GDExtensionMethodInfo * p_list ) ;
typedef GDExtensionBool ( * GDExtensionScriptInstanceHasMethod ) ( GDExtensionScriptInstanceDataPtr p_instance , GDExtensionConstStringNamePtr p_name ) ;
2022-12-14 18:24:35 +01:00
typedef void ( * GDExtensionScriptInstanceCall ) ( GDExtensionScriptInstanceDataPtr p_self , GDExtensionConstStringNamePtr p_method , const GDExtensionConstVariantPtr * p_args , GDExtensionInt p_argument_count , GDExtensionVariantPtr r_return , GDExtensionCallError * r_error ) ;
2022-12-07 12:11:28 +01:00
typedef void ( * GDExtensionScriptInstanceNotification ) ( GDExtensionScriptInstanceDataPtr p_instance , int32_t p_what ) ;
typedef void ( * GDExtensionScriptInstanceToString ) ( GDExtensionScriptInstanceDataPtr p_instance , GDExtensionBool * r_is_valid , GDExtensionStringPtr r_out ) ;
typedef void ( * GDExtensionScriptInstanceRefCountIncremented ) ( GDExtensionScriptInstanceDataPtr p_instance ) ;
typedef GDExtensionBool ( * GDExtensionScriptInstanceRefCountDecremented ) ( GDExtensionScriptInstanceDataPtr p_instance ) ;
typedef GDExtensionObjectPtr ( * GDExtensionScriptInstanceGetScript ) ( GDExtensionScriptInstanceDataPtr p_instance ) ;
typedef GDExtensionBool ( * GDExtensionScriptInstanceIsPlaceholder ) ( GDExtensionScriptInstanceDataPtr p_instance ) ;
typedef void * GDExtensionScriptLanguagePtr ;
typedef GDExtensionScriptLanguagePtr ( * GDExtensionScriptInstanceGetLanguage ) ( GDExtensionScriptInstanceDataPtr p_instance ) ;
typedef void ( * GDExtensionScriptInstanceFree ) ( GDExtensionScriptInstanceDataPtr p_instance ) ;
typedef void * GDExtensionScriptInstancePtr ; // Pointer to ScriptInstance.
typedef struct {
GDExtensionScriptInstanceSet set_func ;
GDExtensionScriptInstanceGet get_func ;
GDExtensionScriptInstanceGetPropertyList get_property_list_func ;
GDExtensionScriptInstanceFreePropertyList free_property_list_func ;
GDExtensionScriptInstancePropertyCanRevert property_can_revert_func ;
GDExtensionScriptInstancePropertyGetRevert property_get_revert_func ;
GDExtensionScriptInstanceGetOwner get_owner_func ;
GDExtensionScriptInstanceGetPropertyState get_property_state_func ;
GDExtensionScriptInstanceGetMethodList get_method_list_func ;
GDExtensionScriptInstanceFreeMethodList free_method_list_func ;
GDExtensionScriptInstanceGetPropertyType get_property_type_func ;
GDExtensionScriptInstanceHasMethod has_method_func ;
GDExtensionScriptInstanceCall call_func ;
GDExtensionScriptInstanceNotification notification_func ;
GDExtensionScriptInstanceToString to_string_func ;
GDExtensionScriptInstanceRefCountIncremented refcount_incremented_func ;
GDExtensionScriptInstanceRefCountDecremented refcount_decremented_func ;
GDExtensionScriptInstanceGetScript get_script_func ;
GDExtensionScriptInstanceIsPlaceholder is_placeholder_func ;
GDExtensionScriptInstanceSet set_fallback_func ;
GDExtensionScriptInstanceGet get_fallback_func ;
GDExtensionScriptInstanceGetLanguage get_language_func ;
GDExtensionScriptInstanceFree free_func ;
} GDExtensionScriptInstanceInfo ;
/* INITIALIZATION */
typedef enum {
GDEXTENSION_INITIALIZATION_CORE ,
GDEXTENSION_INITIALIZATION_SERVERS ,
GDEXTENSION_INITIALIZATION_SCENE ,
GDEXTENSION_INITIALIZATION_EDITOR ,
GDEXTENSION_MAX_INITIALIZATION_LEVEL ,
} GDExtensionInitializationLevel ;
typedef struct {
/* Minimum initialization level required.
* If Core or Servers , the extension needs editor or game restart to take effect */
GDExtensionInitializationLevel minimum_initialization_level ;
/* Up to the user to supply when initializing */
void * userdata ;
/* This function will be called multiple times for each initialization level. */
void ( * initialize ) ( void * userdata , GDExtensionInitializationLevel p_level ) ;
void ( * deinitialize ) ( void * userdata , GDExtensionInitializationLevel p_level ) ;
} GDExtensionInitialization ;
2023-04-24 17:15:27 +02:00
typedef void ( * GDExtensionInterfaceFunctionPtr ) ( ) ;
typedef GDExtensionInterfaceFunctionPtr ( * GDExtensionInterfaceGetProcAddress ) ( const char * p_function_name ) ;
/*
* Each GDExtension should define a C function that matches the signature of GDExtensionInitializationFunction ,
* and export it so that it can be loaded via dlopen ( ) or equivalent for the given platform .
*
* For example :
*
* GDExtensionBool my_extension_init ( GDExtensionInterfaceGetProcAddress p_get_proc_address , GDExtensionClassLibraryPtr p_library , GDExtensionInitialization * r_initialization ) ;
*
* This function ' s name must be specified as the ' entry_symbol ' in the . gdextension file .
*
* This makes it the entry point of the GDExtension and will be called on initialization .
*
* The GDExtension can then modify the r_initialization structure , setting the minimum initialization level ,
* and providing pointers to functions that will be called at various stages of initialization / shutdown .
*
* The rest of the GDExtension ' s interface to Godot consists of function pointers that can be loaded
* by calling p_get_proc_address ( " ... " ) with the name of the function .
*
* For example :
*
* GDExtensionInterfaceGetGodotVersion * get_godot_version = ( GDExtensionInterfaceGetGodotVersion ) p_get_proc_address ( " get_godot_version " ) ;
*
* You can then call it like a normal function :
*
* GDExtensionGodotVersion godot_version ;
* get_godot_version ( & godot_version ) ;
* printf ( " Godot v%d.%d.%d \n " , godot_version . major , godot_version . minor , godot_version . patch ) ;
*
* All of these interface functions are described below , together with the name that ' s used to load it ,
* and the function pointer typedef that shows its signature .
*/
typedef GDExtensionBool ( * GDExtensionInitializationFunction ) ( GDExtensionInterfaceGetProcAddress p_get_proc_address , GDExtensionClassLibraryPtr p_library , GDExtensionInitialization * r_initialization ) ;
/* INTERFACE */
typedef struct {
uint32_t major ;
uint32_t minor ;
uint32_t patch ;
const char * string ;
} GDExtensionGodotVersion ;
/**
* @ name get_godot_version
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets the Godot version that the GDExtension was loaded into .
*
* @ param r_godot_version A pointer to the structure to write the version information into .
*/
typedef void ( * GDExtensionInterfaceGetGodotVersion ) ( GDExtensionGodotVersion * r_godot_version ) ;
/* INTERFACE: Memory */
/**
* @ name mem_alloc
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Allocates memory .
*
* @ param p_bytes The amount of memory to allocate in bytes .
*
* @ return A pointer to the allocated memory , or NULL if unsuccessful .
*/
typedef void * ( * GDExtensionInterfaceMemAlloc ) ( size_t p_bytes ) ;
/**
* @ name mem_realloc
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Reallocates memory .
*
* @ param p_ptr A pointer to the previously allocated memory .
* @ param p_bytes The number of bytes to resize the memory block to .
*
* @ return A pointer to the allocated memory , or NULL if unsuccessful .
*/
typedef void * ( * GDExtensionInterfaceMemRealloc ) ( void * p_ptr , size_t p_bytes ) ;
/**
* @ name mem_free
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Frees memory .
*
* @ param p_ptr A pointer to the previously allocated memory .
*/
typedef void ( * GDExtensionInterfaceMemFree ) ( void * p_ptr ) ;
/* INTERFACE: Godot Core */
/**
* @ name print_error
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Logs an error to Godot ' s built - in debugger and to the OS terminal .
*
* @ param p_description The code trigging the error .
* @ param p_function The function name where the error occurred .
* @ param p_file The file where the error occurred .
* @ param p_line The line where the error occurred .
* @ param p_editor_notify Whether or not to notify the editor .
*/
typedef void ( * GDExtensionInterfacePrintError ) ( const char * p_description , const char * p_function , const char * p_file , int32_t p_line , GDExtensionBool p_editor_notify ) ;
/**
* @ name print_error_with_message
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Logs an error with a message to Godot ' s built - in debugger and to the OS terminal .
*
* @ param p_description The code trigging the error .
* @ param p_message The message to show along with the error .
* @ param p_function The function name where the error occurred .
* @ param p_file The file where the error occurred .
* @ param p_line The line where the error occurred .
* @ param p_editor_notify Whether or not to notify the editor .
*/
typedef void ( * GDExtensionInterfacePrintErrorWithMessage ) ( const char * p_description , const char * p_message , const char * p_function , const char * p_file , int32_t p_line , GDExtensionBool p_editor_notify ) ;
/**
* @ name print_warning
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Logs a warning to Godot ' s built - in debugger and to the OS terminal .
*
* @ param p_description The code trigging the warning .
* @ param p_function The function name where the warning occurred .
* @ param p_file The file where the warning occurred .
* @ param p_line The line where the warning occurred .
* @ param p_editor_notify Whether or not to notify the editor .
*/
typedef void ( * GDExtensionInterfacePrintWarning ) ( const char * p_description , const char * p_function , const char * p_file , int32_t p_line , GDExtensionBool p_editor_notify ) ;
/**
* @ name print_warning_with_message
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Logs a warning with a message to Godot ' s built - in debugger and to the OS terminal .
*
* @ param p_description The code trigging the warning .
* @ param p_message The message to show along with the warning .
* @ param p_function The function name where the warning occurred .
* @ param p_file The file where the warning occurred .
* @ param p_line The line where the warning occurred .
* @ param p_editor_notify Whether or not to notify the editor .
*/
typedef void ( * GDExtensionInterfacePrintWarningWithMessage ) ( const char * p_description , const char * p_message , const char * p_function , const char * p_file , int32_t p_line , GDExtensionBool p_editor_notify ) ;
/**
* @ name print_script_error
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Logs a script error to Godot ' s built - in debugger and to the OS terminal .
*
* @ param p_description The code trigging the error .
* @ param p_function The function name where the error occurred .
* @ param p_file The file where the error occurred .
* @ param p_line The line where the error occurred .
* @ param p_editor_notify Whether or not to notify the editor .
*/
typedef void ( * GDExtensionInterfacePrintScriptError ) ( const char * p_description , const char * p_function , const char * p_file , int32_t p_line , GDExtensionBool p_editor_notify ) ;
/**
* @ name print_script_error_with_message
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Logs a script error with a message to Godot ' s built - in debugger and to the OS terminal .
*
* @ param p_description The code trigging the error .
* @ param p_message The message to show along with the error .
* @ param p_function The function name where the error occurred .
* @ param p_file The file where the error occurred .
* @ param p_line The line where the error occurred .
* @ param p_editor_notify Whether or not to notify the editor .
*/
typedef void ( * GDExtensionInterfacePrintScriptErrorWithMessage ) ( const char * p_description , const char * p_message , const char * p_function , const char * p_file , int32_t p_line , GDExtensionBool p_editor_notify ) ;
/**
* @ name get_native_struct_size
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets the size of a native struct ( ex . ObjectID ) in bytes .
*
* @ param p_name A pointer to a StringName identifying the struct name .
*
* @ return The size in bytes .
*/
typedef uint64_t ( * GDExtensionInterfaceGetNativeStructSize ) ( GDExtensionConstStringNamePtr p_name ) ;
/* INTERFACE: Variant */
/**
* @ name variant_new_copy
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Copies one Variant into a another .
*
* @ param r_dest A pointer to the destination Variant .
* @ param p_src A pointer to the source Variant .
*/
typedef void ( * GDExtensionInterfaceVariantNewCopy ) ( GDExtensionUninitializedVariantPtr r_dest , GDExtensionConstVariantPtr p_src ) ;
/**
* @ name variant_new_nil
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Creates a new Variant containing nil .
*
* @ param r_dest A pointer to the destination Variant .
*/
typedef void ( * GDExtensionInterfaceVariantNewNil ) ( GDExtensionUninitializedVariantPtr r_dest ) ;
/**
* @ name variant_destroy
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Destroys a Variant .
*
* @ param p_self A pointer to the Variant to destroy .
*/
typedef void ( * GDExtensionInterfaceVariantDestroy ) ( GDExtensionVariantPtr p_self ) ;
/**
* @ name variant_call
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Calls a method on a Variant .
*
* @ param p_self A pointer to the Variant .
* @ param p_method A pointer to a StringName identifying the method .
* @ param p_args A pointer to a C array of Variant .
* @ param p_argument_count The number of arguments .
* @ param r_return A pointer a Variant which will be assigned the return value .
* @ param r_error A pointer the structure which will hold error information .
*
* @ see Variant : : callp ( )
*/
typedef void ( * GDExtensionInterfaceVariantCall ) ( GDExtensionVariantPtr p_self , GDExtensionConstStringNamePtr p_method , const GDExtensionConstVariantPtr * p_args , GDExtensionInt p_argument_count , GDExtensionUninitializedVariantPtr r_return , GDExtensionCallError * r_error ) ;
/**
* @ name variant_call_static
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Calls a static method on a Variant .
*
* @ param p_self A pointer to the Variant .
* @ param p_method A pointer to a StringName identifying the method .
* @ param p_args A pointer to a C array of Variant .
* @ param p_argument_count The number of arguments .
* @ param r_return A pointer a Variant which will be assigned the return value .
* @ param r_error A pointer the structure which will be updated with error information .
*
* @ see Variant : : call_static ( )
*/
typedef void ( * GDExtensionInterfaceVariantCallStatic ) ( GDExtensionVariantType p_type , GDExtensionConstStringNamePtr p_method , const GDExtensionConstVariantPtr * p_args , GDExtensionInt p_argument_count , GDExtensionUninitializedVariantPtr r_return , GDExtensionCallError * r_error ) ;
/**
* @ name variant_evaluate
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Evaluate an operator on two Variants .
*
* @ param p_op The operator to evaluate .
* @ param p_a The first Variant .
* @ param p_b The second Variant .
* @ param r_return A pointer a Variant which will be assigned the return value .
* @ param r_valid A pointer to a boolean which will be set to false if the operation is invalid .
*
* @ see Variant : : evaluate ( )
*/
typedef void ( * GDExtensionInterfaceVariantEvaluate ) ( GDExtensionVariantOperator p_op , GDExtensionConstVariantPtr p_a , GDExtensionConstVariantPtr p_b , GDExtensionUninitializedVariantPtr r_return , GDExtensionBool * r_valid ) ;
/**
* @ name variant_set
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Sets a key on a Variant to a value .
*
* @ param p_self A pointer to the Variant .
* @ param p_key A pointer to a Variant representing the key .
* @ param p_value A pointer to a Variant representing the value .
* @ param r_valid A pointer to a boolean which will be set to false if the operation is invalid .
*
* @ see Variant : : set ( )
*/
typedef void ( * GDExtensionInterfaceVariantSet ) ( GDExtensionVariantPtr p_self , GDExtensionConstVariantPtr p_key , GDExtensionConstVariantPtr p_value , GDExtensionBool * r_valid ) ;
/**
* @ name variant_set_named
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Sets a named key on a Variant to a value .
*
* @ param p_self A pointer to the Variant .
* @ param p_key A pointer to a StringName representing the key .
* @ param p_value A pointer to a Variant representing the value .
* @ param r_valid A pointer to a boolean which will be set to false if the operation is invalid .
*
* @ see Variant : : set_named ( )
*/
typedef void ( * GDExtensionInterfaceVariantSetNamed ) ( GDExtensionVariantPtr p_self , GDExtensionConstStringNamePtr p_key , GDExtensionConstVariantPtr p_value , GDExtensionBool * r_valid ) ;
/**
* @ name variant_set_keyed
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Sets a keyed property on a Variant to a value .
*
* @ param p_self A pointer to the Variant .
* @ param p_key A pointer to a Variant representing the key .
* @ param p_value A pointer to a Variant representing the value .
* @ param r_valid A pointer to a boolean which will be set to false if the operation is invalid .
*
* @ see Variant : : set_keyed ( )
*/
typedef void ( * GDExtensionInterfaceVariantSetKeyed ) ( GDExtensionVariantPtr p_self , GDExtensionConstVariantPtr p_key , GDExtensionConstVariantPtr p_value , GDExtensionBool * r_valid ) ;
/**
* @ name variant_set_indexed
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Sets an index on a Variant to a value .
*
* @ param p_self A pointer to the Variant .
* @ param p_index The index .
* @ param p_value A pointer to a Variant representing the value .
* @ param r_valid A pointer to a boolean which will be set to false if the operation is invalid .
* @ param r_oob A pointer to a boolean which will be set to true if the index is out of bounds .
*/
typedef void ( * GDExtensionInterfaceVariantSetIndexed ) ( GDExtensionVariantPtr p_self , GDExtensionInt p_index , GDExtensionConstVariantPtr p_value , GDExtensionBool * r_valid , GDExtensionBool * r_oob ) ;
/**
* @ name variant_get
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets the value of a key from a Variant .
*
* @ param p_self A pointer to the Variant .
* @ param p_key A pointer to a Variant representing the key .
* @ param r_ret A pointer to a Variant which will be assigned the value .
* @ param r_valid A pointer to a boolean which will be set to false if the operation is invalid .
*/
typedef void ( * GDExtensionInterfaceVariantGet ) ( GDExtensionConstVariantPtr p_self , GDExtensionConstVariantPtr p_key , GDExtensionUninitializedVariantPtr r_ret , GDExtensionBool * r_valid ) ;
/**
* @ name variant_get_named
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets the value of a named key from a Variant .
*
* @ param p_self A pointer to the Variant .
* @ param p_key A pointer to a StringName representing the key .
* @ param r_ret A pointer to a Variant which will be assigned the value .
* @ param r_valid A pointer to a boolean which will be set to false if the operation is invalid .
*/
typedef void ( * GDExtensionInterfaceVariantGetNamed ) ( GDExtensionConstVariantPtr p_self , GDExtensionConstStringNamePtr p_key , GDExtensionUninitializedVariantPtr r_ret , GDExtensionBool * r_valid ) ;
/**
* @ name variant_get_keyed
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets the value of a keyed property from a Variant .
*
* @ param p_self A pointer to the Variant .
* @ param p_key A pointer to a Variant representing the key .
* @ param r_ret A pointer to a Variant which will be assigned the value .
* @ param r_valid A pointer to a boolean which will be set to false if the operation is invalid .
*/
typedef void ( * GDExtensionInterfaceVariantGetKeyed ) ( GDExtensionConstVariantPtr p_self , GDExtensionConstVariantPtr p_key , GDExtensionUninitializedVariantPtr r_ret , GDExtensionBool * r_valid ) ;
/**
* @ name variant_get_indexed
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets the value of an index from a Variant .
*
* @ param p_self A pointer to the Variant .
* @ param p_index The index .
* @ param r_ret A pointer to a Variant which will be assigned the value .
* @ param r_valid A pointer to a boolean which will be set to false if the operation is invalid .
* @ param r_oob A pointer to a boolean which will be set to true if the index is out of bounds .
*/
typedef void ( * GDExtensionInterfaceVariantGetIndexed ) ( GDExtensionConstVariantPtr p_self , GDExtensionInt p_index , GDExtensionUninitializedVariantPtr r_ret , GDExtensionBool * r_valid , GDExtensionBool * r_oob ) ;
/**
* @ name variant_iter_init
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Initializes an iterator over a Variant .
*
* @ param p_self A pointer to the Variant .
* @ param r_iter A pointer to a Variant which will be assigned the iterator .
* @ param r_valid A pointer to a boolean which will be set to false if the operation is invalid .
*
* @ return true if the operation is valid ; otherwise false .
*
* @ see Variant : : iter_init ( )
*/
typedef GDExtensionBool ( * GDExtensionInterfaceVariantIterInit ) ( GDExtensionConstVariantPtr p_self , GDExtensionUninitializedVariantPtr r_iter , GDExtensionBool * r_valid ) ;
/**
* @ name variant_iter_next
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets the next value for an iterator over a Variant .
*
* @ param p_self A pointer to the Variant .
* @ param r_iter A pointer to a Variant which will be assigned the iterator .
* @ param r_valid A pointer to a boolean which will be set to false if the operation is invalid .
*
* @ return true if the operation is valid ; otherwise false .
*
* @ see Variant : : iter_next ( )
*/
typedef GDExtensionBool ( * GDExtensionInterfaceVariantIterNext ) ( GDExtensionConstVariantPtr p_self , GDExtensionVariantPtr r_iter , GDExtensionBool * r_valid ) ;
/**
* @ name variant_iter_get
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets the next value for an iterator over a Variant .
*
* @ param p_self A pointer to the Variant .
* @ param r_iter A pointer to a Variant which will be assigned the iterator .
* @ param r_ret A pointer to a Variant which will be assigned false if the operation is invalid .
* @ param r_valid A pointer to a boolean which will be set to false if the operation is invalid .
*
* @ see Variant : : iter_get ( )
*/
typedef void ( * GDExtensionInterfaceVariantIterGet ) ( GDExtensionConstVariantPtr p_self , GDExtensionVariantPtr r_iter , GDExtensionUninitializedVariantPtr r_ret , GDExtensionBool * r_valid ) ;
/**
* @ name variant_hash
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets the hash of a Variant .
*
* @ param p_self A pointer to the Variant .
*
* @ return The hash value .
*
* @ see Variant : : hash ( )
*/
typedef GDExtensionInt ( * GDExtensionInterfaceVariantHash ) ( GDExtensionConstVariantPtr p_self ) ;
/**
* @ name variant_recursive_hash
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets the recursive hash of a Variant .
*
* @ param p_self A pointer to the Variant .
* @ param p_recursion_count The number of recursive loops so far .
*
* @ return The hash value .
*
* @ see Variant : : recursive_hash ( )
*/
typedef GDExtensionInt ( * GDExtensionInterfaceVariantRecursiveHash ) ( GDExtensionConstVariantPtr p_self , GDExtensionInt p_recursion_count ) ;
/**
* @ name variant_hash_compare
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Compares two Variants by their hash .
*
* @ param p_self A pointer to the Variant .
* @ param p_other A pointer to the other Variant to compare it to .
*
* @ return The hash value .
*
* @ see Variant : : hash_compare ( )
*/
typedef GDExtensionBool ( * GDExtensionInterfaceVariantHashCompare ) ( GDExtensionConstVariantPtr p_self , GDExtensionConstVariantPtr p_other ) ;
/**
* @ name variant_booleanize
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Converts a Variant to a boolean .
*
* @ param p_self A pointer to the Variant .
*
* @ return The boolean value of the Variant .
*/
typedef GDExtensionBool ( * GDExtensionInterfaceVariantBooleanize ) ( GDExtensionConstVariantPtr p_self ) ;
/**
* @ name variant_duplicate
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Duplicates a Variant .
*
* @ param p_self A pointer to the Variant .
* @ param r_ret A pointer to a Variant to store the duplicated value .
* @ param p_deep Whether or not to duplicate deeply ( when supported by the Variant type ) .
*/
typedef void ( * GDExtensionInterfaceVariantDuplicate ) ( GDExtensionConstVariantPtr p_self , GDExtensionVariantPtr r_ret , GDExtensionBool p_deep ) ;
/**
* @ name variant_stringify
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Converts a Variant to a string .
*
* @ param p_self A pointer to the Variant .
* @ param r_ret A pointer to a String to store the resulting value .
*/
typedef void ( * GDExtensionInterfaceVariantStringify ) ( GDExtensionConstVariantPtr p_self , GDExtensionStringPtr r_ret ) ;
/**
* @ name variant_get_type
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets the type of a Variant .
*
* @ param p_self A pointer to the Variant .
*
* @ return The variant type .
*/
typedef GDExtensionVariantType ( * GDExtensionInterfaceVariantGetType ) ( GDExtensionConstVariantPtr p_self ) ;
/**
* @ name variant_has_method
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Checks if a Variant has the given method .
*
* @ param p_self A pointer to the Variant .
* @ param p_method A pointer to a StringName with the method name .
*
* @ return
*/
typedef GDExtensionBool ( * GDExtensionInterfaceVariantHasMethod ) ( GDExtensionConstVariantPtr p_self , GDExtensionConstStringNamePtr p_method ) ;
/**
* @ name variant_has_member
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Checks if a type of Variant has the given member .
*
* @ param p_type The Variant type .
* @ param p_member A pointer to a StringName with the member name .
*
* @ return
*/
typedef GDExtensionBool ( * GDExtensionInterfaceVariantHasMember ) ( GDExtensionVariantType p_type , GDExtensionConstStringNamePtr p_member ) ;
/**
* @ name variant_has_key
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Checks if a Variant has a key .
*
* @ param p_self A pointer to the Variant .
* @ param p_key A pointer to a Variant representing the key .
* @ param r_valid A pointer to a boolean which will be set to false if the key doesn ' t exist .
*
* @ return true if the key exists ; otherwise false .
*/
typedef GDExtensionBool ( * GDExtensionInterfaceVariantHasKey ) ( GDExtensionConstVariantPtr p_self , GDExtensionConstVariantPtr p_key , GDExtensionBool * r_valid ) ;
/**
* @ name variant_get_type_name
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets the name of a Variant type .
*
* @ param p_type The Variant type .
* @ param r_name A pointer to a String to store the Variant type name .
*/
typedef void ( * GDExtensionInterfaceVariantGetTypeName ) ( GDExtensionVariantType p_type , GDExtensionUninitializedStringPtr r_name ) ;
/**
* @ name variant_can_convert
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Checks if Variants can be converted from one type to another .
*
* @ param p_from The Variant type to convert from .
* @ param p_to The Variant type to convert to .
*
* @ return true if the conversion is possible ; otherwise false .
*/
typedef GDExtensionBool ( * GDExtensionInterfaceVariantCanConvert ) ( GDExtensionVariantType p_from , GDExtensionVariantType p_to ) ;
/**
* @ name variant_can_convert_strict
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Checks if Variant can be converted from one type to another using stricter rules .
*
* @ param p_from The Variant type to convert from .
* @ param p_to The Variant type to convert to .
*
* @ return true if the conversion is possible ; otherwise false .
*/
typedef GDExtensionBool ( * GDExtensionInterfaceVariantCanConvertStrict ) ( GDExtensionVariantType p_from , GDExtensionVariantType p_to ) ;
/**
* @ name get_variant_from_type_constructor
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a function that can create a Variant of the given type from a raw value .
*
* @ param p_type The Variant type .
*
* @ return A pointer to a function that can create a Variant of the given type from a raw value .
*/
typedef GDExtensionVariantFromTypeConstructorFunc ( * GDExtensionInterfaceGetVariantFromTypeConstructor ) ( GDExtensionVariantType p_type ) ;
/**
* @ name get_variant_to_type_constructor
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a function that can get the raw value from a Variant of the given type .
*
* @ param p_type The Variant type .
*
* @ return A pointer to a function that can get the raw value from a Variant of the given type .
*/
typedef GDExtensionTypeFromVariantConstructorFunc ( * GDExtensionInterfaceGetVariantToTypeConstructor ) ( GDExtensionVariantType p_type ) ;
/**
* @ name variant_get_ptr_operator_evaluator
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a function that can evaluate the given Variant operator on the given Variant types .
*
* @ param p_operator The variant operator .
* @ param p_type_a The type of the first Variant .
* @ param p_type_b The type of the second Variant .
*
* @ return A pointer to a function that can evaluate the given Variant operator on the given Variant types .
*/
typedef GDExtensionPtrOperatorEvaluator ( * GDExtensionInterfaceVariantGetPtrOperatorEvaluator ) ( GDExtensionVariantOperator p_operator , GDExtensionVariantType p_type_a , GDExtensionVariantType p_type_b ) ;
/**
* @ name variant_get_ptr_builtin_method
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a function that can call a builtin method on a type of Variant .
*
* @ param p_type The Variant type .
* @ param p_method A pointer to a StringName with the method name .
* @ param p_hash A hash representing the method signature .
*
* @ return A pointer to a function that can call a builtin method on a type of Variant .
*/
typedef GDExtensionPtrBuiltInMethod ( * GDExtensionInterfaceVariantGetPtrBuiltinMethod ) ( GDExtensionVariantType p_type , GDExtensionConstStringNamePtr p_method , GDExtensionInt p_hash ) ;
/**
* @ name variant_get_ptr_constructor
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a function that can call one of the constructors for a type of Variant .
*
* @ param p_type The Variant type .
* @ param p_constructor The index of the constructor .
*
* @ return A pointer to a function that can call one of the constructors for a type of Variant .
*/
typedef GDExtensionPtrConstructor ( * GDExtensionInterfaceVariantGetPtrConstructor ) ( GDExtensionVariantType p_type , int32_t p_constructor ) ;
/**
* @ name variant_get_ptr_destructor
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a function than can call the destructor for a type of Variant .
*
* @ param p_type The Variant type .
*
* @ return A pointer to a function than can call the destructor for a type of Variant .
*/
typedef GDExtensionPtrDestructor ( * GDExtensionInterfaceVariantGetPtrDestructor ) ( GDExtensionVariantType p_type ) ;
/**
* @ name variant_construct
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Constructs a Variant of the given type , using the first constructor that matches the given arguments .
*
* @ param p_type The Variant type .
* @ param p_base A pointer to a Variant to store the constructed value .
* @ param p_args A pointer to a C array of Variant pointers representing the arguments for the constructor .
* @ param p_argument_count The number of arguments to pass to the constructor .
* @ param r_error A pointer the structure which will be updated with error information .
*/
typedef void ( * GDExtensionInterfaceVariantConstruct ) ( GDExtensionVariantType p_type , GDExtensionUninitializedVariantPtr r_base , const GDExtensionConstVariantPtr * p_args , int32_t p_argument_count , GDExtensionCallError * r_error ) ;
/**
* @ name variant_get_ptr_setter
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a function that can call a member ' s setter on the given Variant type .
*
* @ param p_type The Variant type .
* @ param p_member A pointer to a StringName with the member name .
*
* @ return A pointer to a function that can call a member ' s setter on the given Variant type .
*/
typedef GDExtensionPtrSetter ( * GDExtensionInterfaceVariantGetPtrSetter ) ( GDExtensionVariantType p_type , GDExtensionConstStringNamePtr p_member ) ;
/**
* @ name variant_get_ptr_getter
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a function that can call a member ' s getter on the given Variant type .
*
* @ param p_type The Variant type .
* @ param p_member A pointer to a StringName with the member name .
*
* @ return A pointer to a function that can call a member ' s getter on the given Variant type .
*/
typedef GDExtensionPtrGetter ( * GDExtensionInterfaceVariantGetPtrGetter ) ( GDExtensionVariantType p_type , GDExtensionConstStringNamePtr p_member ) ;
/**
* @ name variant_get_ptr_indexed_setter
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a function that can set an index on the given Variant type .
*
* @ param p_type The Variant type .
*
* @ return A pointer to a function that can set an index on the given Variant type .
*/
typedef GDExtensionPtrIndexedSetter ( * GDExtensionInterfaceVariantGetPtrIndexedSetter ) ( GDExtensionVariantType p_type ) ;
/**
* @ name variant_get_ptr_indexed_getter
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a function that can get an index on the given Variant type .
*
* @ param p_type The Variant type .
*
* @ return A pointer to a function that can get an index on the given Variant type .
*/
typedef GDExtensionPtrIndexedGetter ( * GDExtensionInterfaceVariantGetPtrIndexedGetter ) ( GDExtensionVariantType p_type ) ;
/**
* @ name variant_get_ptr_keyed_setter
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a function that can set a key on the given Variant type .
*
* @ param p_type The Variant type .
*
* @ return A pointer to a function that can set a key on the given Variant type .
*/
typedef GDExtensionPtrKeyedSetter ( * GDExtensionInterfaceVariantGetPtrKeyedSetter ) ( GDExtensionVariantType p_type ) ;
/**
* @ name variant_get_ptr_keyed_getter
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a function that can get a key on the given Variant type .
*
* @ param p_type The Variant type .
*
* @ return A pointer to a function that can get a key on the given Variant type .
*/
typedef GDExtensionPtrKeyedGetter ( * GDExtensionInterfaceVariantGetPtrKeyedGetter ) ( GDExtensionVariantType p_type ) ;
/**
* @ name variant_get_ptr_keyed_checker
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a function that can check a key on the given Variant type .
*
* @ param p_type The Variant type .
*
* @ return A pointer to a function that can check a key on the given Variant type .
*/
typedef GDExtensionPtrKeyedChecker ( * GDExtensionInterfaceVariantGetPtrKeyedChecker ) ( GDExtensionVariantType p_type ) ;
/**
* @ name variant_get_constant_value
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets the value of a constant from the given Variant type .
*
* @ param p_type The Variant type .
* @ param p_constant A pointer to a StringName with the constant name .
* @ param r_ret A pointer to a Variant to store the value .
*/
typedef void ( * GDExtensionInterfaceVariantGetConstantValue ) ( GDExtensionVariantType p_type , GDExtensionConstStringNamePtr p_constant , GDExtensionUninitializedVariantPtr r_ret ) ;
/**
* @ name variant_get_ptr_utility_function
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a function that can call a Variant utility function .
*
* @ param p_function A pointer to a StringName with the function name .
* @ param p_hash A hash representing the function signature .
*
* @ return A pointer to a function that can call a Variant utility function .
*/
typedef GDExtensionPtrUtilityFunction ( * GDExtensionInterfaceVariantGetPtrUtilityFunction ) ( GDExtensionConstStringNamePtr p_function , GDExtensionInt p_hash ) ;
/* INTERFACE: String Utilities */
/**
* @ name string_new_with_latin1_chars
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Creates a String from a Latin - 1 encoded C string .
*
* @ param r_dest A pointer to a Variant to hold the newly created String .
* @ param p_contents A pointer to a Latin - 1 encoded C string ( null terminated ) .
*/
typedef void ( * GDExtensionInterfaceStringNewWithLatin1Chars ) ( GDExtensionUninitializedStringPtr r_dest , const char * p_contents ) ;
/**
* @ name string_new_with_utf8_chars
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Creates a String from a UTF - 8 encoded C string .
*
* @ param r_dest A pointer to a Variant to hold the newly created String .
* @ param p_contents A pointer to a UTF - 8 encoded C string ( null terminated ) .
*/
typedef void ( * GDExtensionInterfaceStringNewWithUtf8Chars ) ( GDExtensionUninitializedStringPtr r_dest , const char * p_contents ) ;
/**
* @ name string_new_with_utf16_chars
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Creates a String from a UTF - 16 encoded C string .
*
* @ param r_dest A pointer to a Variant to hold the newly created String .
* @ param p_contents A pointer to a UTF - 16 encoded C string ( null terminated ) .
*/
typedef void ( * GDExtensionInterfaceStringNewWithUtf16Chars ) ( GDExtensionUninitializedStringPtr r_dest , const char16_t * p_contents ) ;
/**
* @ name string_new_with_utf32_chars
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Creates a String from a UTF - 32 encoded C string .
*
* @ param r_dest A pointer to a Variant to hold the newly created String .
* @ param p_contents A pointer to a UTF - 32 encoded C string ( null terminated ) .
*/
typedef void ( * GDExtensionInterfaceStringNewWithUtf32Chars ) ( GDExtensionUninitializedStringPtr r_dest , const char32_t * p_contents ) ;
/**
* @ name string_new_with_wide_chars
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Creates a String from a wide C string .
*
* @ param r_dest A pointer to a Variant to hold the newly created String .
* @ param p_contents A pointer to a wide C string ( null terminated ) .
*/
typedef void ( * GDExtensionInterfaceStringNewWithWideChars ) ( GDExtensionUninitializedStringPtr r_dest , const wchar_t * p_contents ) ;
/**
* @ name string_new_with_latin1_chars_and_len
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Creates a String from a Latin - 1 encoded C string with the given length .
*
* @ param r_dest A pointer to a Variant to hold the newly created String .
* @ param p_contents A pointer to a Latin - 1 encoded C string .
* @ param p_size The number of characters .
*/
typedef void ( * GDExtensionInterfaceStringNewWithLatin1CharsAndLen ) ( GDExtensionUninitializedStringPtr r_dest , const char * p_contents , GDExtensionInt p_size ) ;
/**
* @ name string_new_with_utf8_chars_and_len
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Creates a String from a UTF - 8 encoded C string with the given length .
*
* @ param r_dest A pointer to a Variant to hold the newly created String .
* @ param p_contents A pointer to a UTF - 8 encoded C string .
* @ param p_size The number of characters .
*/
typedef void ( * GDExtensionInterfaceStringNewWithUtf8CharsAndLen ) ( GDExtensionUninitializedStringPtr r_dest , const char * p_contents , GDExtensionInt p_size ) ;
/**
* @ name string_new_with_utf16_chars_and_len
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Creates a String from a UTF - 16 encoded C string with the given length .
*
* @ param r_dest A pointer to a Variant to hold the newly created String .
* @ param p_contents A pointer to a UTF - 16 encoded C string .
* @ param p_size The number of characters .
*/
typedef void ( * GDExtensionInterfaceStringNewWithUtf16CharsAndLen ) ( GDExtensionUninitializedStringPtr r_dest , const char16_t * p_contents , GDExtensionInt p_size ) ;
/**
* @ name string_new_with_utf32_chars_and_len
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Creates a String from a UTF - 32 encoded C string with the given length .
*
* @ param r_dest A pointer to a Variant to hold the newly created String .
* @ param p_contents A pointer to a UTF - 32 encoded C string .
* @ param p_size The number of characters .
*/
typedef void ( * GDExtensionInterfaceStringNewWithUtf32CharsAndLen ) ( GDExtensionUninitializedStringPtr r_dest , const char32_t * p_contents , GDExtensionInt p_size ) ;
/**
* @ name string_new_with_wide_chars_and_len
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Creates a String from a wide C string with the given length .
*
* @ param r_dest A pointer to a Variant to hold the newly created String .
* @ param p_contents A pointer to a wide C string .
* @ param p_size The number of characters .
*/
typedef void ( * GDExtensionInterfaceStringNewWithWideCharsAndLen ) ( GDExtensionUninitializedStringPtr r_dest , const wchar_t * p_contents , GDExtensionInt p_size ) ;
/**
* @ name string_to_latin1_chars
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Converts a String to a Latin - 1 encoded C string .
*
* It doesn ' t write a null terminator .
*
* @ param p_self A pointer to the String .
* @ param r_text A pointer to the buffer to hold the resulting data . If NULL is passed in , only the length will be computed .
* @ param p_max_write_length The maximum number of characters that can be written to r_text . It has no affect on the return value .
*
* @ return The resulting encoded string length in characters ( not bytes ) , not including a null terminator .
*/
typedef GDExtensionInt ( * GDExtensionInterfaceStringToLatin1Chars ) ( GDExtensionConstStringPtr p_self , char * r_text , GDExtensionInt p_max_write_length ) ;
/**
* @ name string_to_utf8_chars
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Converts a String to a UTF - 8 encoded C string .
*
* It doesn ' t write a null terminator .
*
* @ param p_self A pointer to the String .
* @ param r_text A pointer to the buffer to hold the resulting data . If NULL is passed in , only the length will be computed .
* @ param p_max_write_length The maximum number of characters that can be written to r_text . It has no affect on the return value .
*
* @ return The resulting encoded string length in characters ( not bytes ) , not including a null terminator .
*/
typedef GDExtensionInt ( * GDExtensionInterfaceStringToUtf8Chars ) ( GDExtensionConstStringPtr p_self , char * r_text , GDExtensionInt p_max_write_length ) ;
/**
* @ name string_to_utf16_chars
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Converts a String to a UTF - 16 encoded C string .
*
* It doesn ' t write a null terminator .
*
* @ param p_self A pointer to the String .
* @ param r_text A pointer to the buffer to hold the resulting data . If NULL is passed in , only the length will be computed .
* @ param p_max_write_length The maximum number of characters that can be written to r_text . It has no affect on the return value .
*
* @ return The resulting encoded string length in characters ( not bytes ) , not including a null terminator .
*/
typedef GDExtensionInt ( * GDExtensionInterfaceStringToUtf16Chars ) ( GDExtensionConstStringPtr p_self , char16_t * r_text , GDExtensionInt p_max_write_length ) ;
/**
* @ name string_to_utf32_chars
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Converts a String to a UTF - 32 encoded C string .
*
* It doesn ' t write a null terminator .
*
* @ param p_self A pointer to the String .
* @ param r_text A pointer to the buffer to hold the resulting data . If NULL is passed in , only the length will be computed .
* @ param p_max_write_length The maximum number of characters that can be written to r_text . It has no affect on the return value .
*
* @ return The resulting encoded string length in characters ( not bytes ) , not including a null terminator .
*/
typedef GDExtensionInt ( * GDExtensionInterfaceStringToUtf32Chars ) ( GDExtensionConstStringPtr p_self , char32_t * r_text , GDExtensionInt p_max_write_length ) ;
/**
* @ name string_to_wide_chars
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Converts a String to a wide C string .
*
* It doesn ' t write a null terminator .
*
* @ param p_self A pointer to the String .
* @ param r_text A pointer to the buffer to hold the resulting data . If NULL is passed in , only the length will be computed .
* @ param p_max_write_length The maximum number of characters that can be written to r_text . It has no affect on the return value .
*
* @ return The resulting encoded string length in characters ( not bytes ) , not including a null terminator .
*/
typedef GDExtensionInt ( * GDExtensionInterfaceStringToWideChars ) ( GDExtensionConstStringPtr p_self , wchar_t * r_text , GDExtensionInt p_max_write_length ) ;
/**
* @ name string_operator_index
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to the character at the given index from a String .
*
* @ param p_self A pointer to the String .
* @ param p_index The index .
*
* @ return A pointer to the requested character .
*/
typedef char32_t * ( * GDExtensionInterfaceStringOperatorIndex ) ( GDExtensionStringPtr p_self , GDExtensionInt p_index ) ;
/**
* @ name string_operator_index_const
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a const pointer to the character at the given index from a String .
*
* @ param p_self A pointer to the String .
* @ param p_index The index .
*
* @ return A const pointer to the requested character .
*/
typedef const char32_t * ( * GDExtensionInterfaceStringOperatorIndexConst ) ( GDExtensionConstStringPtr p_self , GDExtensionInt p_index ) ;
/**
* @ name string_operator_plus_eq_string
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Appends another String to a String .
*
* @ param p_self A pointer to the String .
* @ param p_b A pointer to the other String to append .
*/
typedef void ( * GDExtensionInterfaceStringOperatorPlusEqString ) ( GDExtensionStringPtr p_self , GDExtensionConstStringPtr p_b ) ;
/**
* @ name string_operator_plus_eq_char
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Appends a character to a String .
*
* @ param p_self A pointer to the String .
* @ param p_b A pointer to the character to append .
*/
typedef void ( * GDExtensionInterfaceStringOperatorPlusEqChar ) ( GDExtensionStringPtr p_self , char32_t p_b ) ;
/**
* @ name string_operator_plus_eq_cstr
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Appends a Latin - 1 encoded C string to a String .
*
* @ param p_self A pointer to the String .
* @ param p_b A pointer to a Latin - 1 encoded C string ( null terminated ) .
*/
typedef void ( * GDExtensionInterfaceStringOperatorPlusEqCstr ) ( GDExtensionStringPtr p_self , const char * p_b ) ;
/**
* @ name string_operator_plus_eq_wcstr
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Appends a wide C string to a String .
*
* @ param p_self A pointer to the String .
* @ param p_b A pointer to a wide C string ( null terminated ) .
*/
typedef void ( * GDExtensionInterfaceStringOperatorPlusEqWcstr ) ( GDExtensionStringPtr p_self , const wchar_t * p_b ) ;
/**
* @ name string_operator_plus_eq_c32str
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Appends a UTF - 32 encoded C string to a String .
*
* @ param p_self A pointer to the String .
* @ param p_b A pointer to a UTF - 32 encoded C string ( null terminated ) .
*/
typedef void ( * GDExtensionInterfaceStringOperatorPlusEqC32str ) ( GDExtensionStringPtr p_self , const char32_t * p_b ) ;
/* INTERFACE: XMLParser Utilities */
/**
* @ name xml_parser_open_buffer
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Opens a raw XML buffer on an XMLParser instance .
*
* @ param p_instance A pointer to an XMLParser object .
* @ param p_buffer A pointer to the buffer .
* @ param p_size The size of the buffer .
*
* @ return A Godot error code ( ex . OK , ERR_INVALID_DATA , etc ) .
*
* @ see XMLParser : : open_buffer ( )
*/
typedef GDExtensionInt ( * GDExtensionInterfaceXmlParserOpenBuffer ) ( GDExtensionObjectPtr p_instance , const uint8_t * p_buffer , size_t p_size ) ;
/* INTERFACE: FileAccess Utilities */
/**
* @ name file_access_store_buffer
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Stores the given buffer using an instance of FileAccess .
*
* @ param p_instance A pointer to a FileAccess object .
* @ param p_src A pointer to the buffer .
* @ param p_length The size of the buffer .
*
* @ see FileAccess : : store_buffer ( )
*/
typedef void ( * GDExtensionInterfaceFileAccessStoreBuffer ) ( GDExtensionObjectPtr p_instance , const uint8_t * p_src , uint64_t p_length ) ;
/**
* @ name file_access_get_buffer
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Reads the next p_length bytes into the given buffer using an instance of FileAccess .
*
* @ param p_instance A pointer to a FileAccess object .
* @ param p_dst A pointer to the buffer to store the data .
* @ param p_length The requested number of bytes to read .
*
* @ return The actual number of bytes read ( may be less than requested ) .
*/
typedef uint64_t ( * GDExtensionInterfaceFileAccessGetBuffer ) ( GDExtensionConstObjectPtr p_instance , uint8_t * p_dst , uint64_t p_length ) ;
/* INTERFACE: WorkerThreadPool Utilities */
/**
* @ name worker_thread_pool_add_native_group_task
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Adds a group task to an instance of WorkerThreadPool .
*
* @ param p_instance A pointer to a WorkerThreadPool object .
* @ param p_func A pointer to a function to run in the thread pool .
* @ param p_userdata A pointer to arbitrary data which will be passed to p_func .
* @ param p_tasks The number of tasks needed in the group .
* @ param p_high_priority Whether or not this is a high priority task .
* @ param p_description A pointer to a String with the task description .
*
* @ return The task group ID .
*
* @ see WorkerThreadPool : : add_group_task ( )
*/
typedef int64_t ( * GDExtensionInterfaceWorkerThreadPoolAddNativeGroupTask ) ( GDExtensionObjectPtr p_instance , void ( * p_func ) ( void * , uint32_t ) , void * p_userdata , int p_elements , int p_tasks , GDExtensionBool p_high_priority , GDExtensionConstStringPtr p_description ) ;
/**
* @ name worker_thread_pool_add_native_task
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Adds a task to an instance of WorkerThreadPool .
*
* @ param p_instance A pointer to a WorkerThreadPool object .
* @ param p_func A pointer to a function to run in the thread pool .
* @ param p_userdata A pointer to arbitrary data which will be passed to p_func .
* @ param p_high_priority Whether or not this is a high priority task .
* @ param p_description A pointer to a String with the task description .
*
* @ return The task ID .
*/
typedef int64_t ( * GDExtensionInterfaceWorkerThreadPoolAddNativeTask ) ( GDExtensionObjectPtr p_instance , void ( * p_func ) ( void * ) , void * p_userdata , GDExtensionBool p_high_priority , GDExtensionConstStringPtr p_description ) ;
/* INTERFACE: Packed Array */
/**
* @ name packed_byte_array_operator_index
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a byte in a PackedByteArray .
*
* @ param p_self A pointer to a PackedByteArray object .
* @ param p_index The index of the byte to get .
*
* @ return A pointer to the requested byte .
*/
typedef uint8_t * ( * GDExtensionInterfacePackedByteArrayOperatorIndex ) ( GDExtensionTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name packed_byte_array_operator_index_const
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a const pointer to a byte in a PackedByteArray .
*
* @ param p_self A const pointer to a PackedByteArray object .
* @ param p_index The index of the byte to get .
*
* @ return A const pointer to the requested byte .
*/
typedef const uint8_t * ( * GDExtensionInterfacePackedByteArrayOperatorIndexConst ) ( GDExtensionConstTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name packed_color_array_operator_index
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a color in a PackedColorArray .
*
* @ param p_self A pointer to a PackedColorArray object .
* @ param p_index The index of the Color to get .
*
* @ return A pointer to the requested Color .
*/
typedef GDExtensionTypePtr ( * GDExtensionInterfacePackedColorArrayOperatorIndex ) ( GDExtensionTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name packed_color_array_operator_index_const
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a const pointer to a color in a PackedColorArray .
*
* @ param p_self A const pointer to a const PackedColorArray object .
* @ param p_index The index of the Color to get .
*
* @ return A const pointer to the requested Color .
*/
typedef GDExtensionTypePtr ( * GDExtensionInterfacePackedColorArrayOperatorIndexConst ) ( GDExtensionConstTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name packed_float32_array_operator_index
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a 32 - bit float in a PackedFloat32Array .
*
* @ param p_self A pointer to a PackedFloat32Array object .
* @ param p_index The index of the float to get .
*
* @ return A pointer to the requested 32 - bit float .
*/
typedef float * ( * GDExtensionInterfacePackedFloat32ArrayOperatorIndex ) ( GDExtensionTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name packed_float32_array_operator_index_const
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a const pointer to a 32 - bit float in a PackedFloat32Array .
*
* @ param p_self A const pointer to a PackedFloat32Array object .
* @ param p_index The index of the float to get .
*
* @ return A const pointer to the requested 32 - bit float .
*/
typedef const float * ( * GDExtensionInterfacePackedFloat32ArrayOperatorIndexConst ) ( GDExtensionConstTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name packed_float64_array_operator_index
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a 64 - bit float in a PackedFloat64Array .
*
* @ param p_self A pointer to a PackedFloat64Array object .
* @ param p_index The index of the float to get .
*
* @ return A pointer to the requested 64 - bit float .
*/
typedef double * ( * GDExtensionInterfacePackedFloat64ArrayOperatorIndex ) ( GDExtensionTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name packed_float64_array_operator_index_const
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a const pointer to a 64 - bit float in a PackedFloat64Array .
*
* @ param p_self A const pointer to a PackedFloat64Array object .
* @ param p_index The index of the float to get .
*
* @ return A const pointer to the requested 64 - bit float .
*/
typedef const double * ( * GDExtensionInterfacePackedFloat64ArrayOperatorIndexConst ) ( GDExtensionConstTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name packed_int32_array_operator_index
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a 32 - bit integer in a PackedInt32Array .
*
* @ param p_self A pointer to a PackedInt32Array object .
* @ param p_index The index of the integer to get .
*
* @ return A pointer to the requested 32 - bit integer .
*/
typedef int32_t * ( * GDExtensionInterfacePackedInt32ArrayOperatorIndex ) ( GDExtensionTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name packed_int32_array_operator_index_const
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a const pointer to a 32 - bit integer in a PackedInt32Array .
*
* @ param p_self A const pointer to a PackedInt32Array object .
* @ param p_index The index of the integer to get .
*
* @ return A const pointer to the requested 32 - bit integer .
*/
typedef const int32_t * ( * GDExtensionInterfacePackedInt32ArrayOperatorIndexConst ) ( GDExtensionConstTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name packed_int64_array_operator_index
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a 64 - bit integer in a PackedInt64Array .
*
* @ param p_self A pointer to a PackedInt64Array object .
* @ param p_index The index of the integer to get .
*
* @ return A pointer to the requested 64 - bit integer .
*/
typedef int64_t * ( * GDExtensionInterfacePackedInt64ArrayOperatorIndex ) ( GDExtensionTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name packed_int64_array_operator_index_const
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a const pointer to a 64 - bit integer in a PackedInt64Array .
*
* @ param p_self A const pointer to a PackedInt64Array object .
* @ param p_index The index of the integer to get .
*
* @ return A const pointer to the requested 64 - bit integer .
*/
typedef const int64_t * ( * GDExtensionInterfacePackedInt64ArrayOperatorIndexConst ) ( GDExtensionConstTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name packed_string_array_operator_index
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a string in a PackedStringArray .
*
* @ param p_self A pointer to a PackedStringArray object .
* @ param p_index The index of the String to get .
*
* @ return A pointer to the requested String .
*/
typedef GDExtensionStringPtr ( * GDExtensionInterfacePackedStringArrayOperatorIndex ) ( GDExtensionTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name packed_string_array_operator_index_const
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a const pointer to a string in a PackedStringArray .
*
* @ param p_self A const pointer to a PackedStringArray object .
* @ param p_index The index of the String to get .
*
* @ return A const pointer to the requested String .
*/
typedef GDExtensionStringPtr ( * GDExtensionInterfacePackedStringArrayOperatorIndexConst ) ( GDExtensionConstTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name packed_vector2_array_operator_index
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a Vector2 in a PackedVector2Array .
*
* @ param p_self A pointer to a PackedVector2Array object .
* @ param p_index The index of the Vector2 to get .
*
* @ return A pointer to the requested Vector2 .
*/
typedef GDExtensionTypePtr ( * GDExtensionInterfacePackedVector2ArrayOperatorIndex ) ( GDExtensionTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name packed_vector2_array_operator_index_const
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a const pointer to a Vector2 in a PackedVector2Array .
*
* @ param p_self A const pointer to a PackedVector2Array object .
* @ param p_index The index of the Vector2 to get .
*
* @ return A const pointer to the requested Vector2 .
*/
typedef GDExtensionTypePtr ( * GDExtensionInterfacePackedVector2ArrayOperatorIndexConst ) ( GDExtensionConstTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name packed_vector3_array_operator_index
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a Vector3 in a PackedVector3Array .
*
* @ param p_self A pointer to a PackedVector3Array object .
* @ param p_index The index of the Vector3 to get .
*
* @ return A pointer to the requested Vector3 .
*/
typedef GDExtensionTypePtr ( * GDExtensionInterfacePackedVector3ArrayOperatorIndex ) ( GDExtensionTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name packed_vector3_array_operator_index_const
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a const pointer to a Vector3 in a PackedVector3Array .
*
* @ param p_self A const pointer to a PackedVector3Array object .
* @ param p_index The index of the Vector3 to get .
*
* @ return A const pointer to the requested Vector3 .
*/
typedef GDExtensionTypePtr ( * GDExtensionInterfacePackedVector3ArrayOperatorIndexConst ) ( GDExtensionConstTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name array_operator_index
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a Variant in an Array .
*
* @ param p_self A pointer to an Array object .
* @ param p_index The index of the Variant to get .
*
* @ return A pointer to the requested Variant .
*/
typedef GDExtensionVariantPtr ( * GDExtensionInterfaceArrayOperatorIndex ) ( GDExtensionTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name array_operator_index_const
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a const pointer to a Variant in an Array .
*
* @ param p_self A const pointer to an Array object .
* @ param p_index The index of the Variant to get .
*
* @ return A const pointer to the requested Variant .
*/
typedef GDExtensionVariantPtr ( * GDExtensionInterfaceArrayOperatorIndexConst ) ( GDExtensionConstTypePtr p_self , GDExtensionInt p_index ) ;
/**
* @ name array_ref
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Sets an Array to be a reference to another Array object .
*
* @ param p_self A pointer to the Array object to update .
* @ param p_from A pointer to the Array object to reference .
*/
typedef void ( * GDExtensionInterfaceArrayRef ) ( GDExtensionTypePtr p_self , GDExtensionConstTypePtr p_from ) ;
/**
* @ name array_set_typed
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Makes an Array into a typed Array .
*
* @ param p_self A pointer to the Array .
* @ param p_type The type of Variant the Array will store .
* @ param p_class_name A pointer to a StringName with the name of the object ( if p_type is GDEXTENSION_VARIANT_TYPE_OBJECT ) .
* @ param p_script A pointer to a Script object ( if p_type is GDEXTENSION_VARIANT_TYPE_OBJECT and the base class is extended by a script ) .
*/
typedef void ( * GDExtensionInterfaceArraySetTyped ) ( GDExtensionTypePtr p_self , GDExtensionVariantType p_type , GDExtensionConstStringNamePtr p_class_name , GDExtensionConstVariantPtr p_script ) ;
/* INTERFACE: Dictionary */
/**
* @ name dictionary_operator_index
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to a Variant in a Dictionary with the given key .
*
* @ param p_self A pointer to a Dictionary object .
* @ param p_key A pointer to a Variant representing the key .
*
* @ return A pointer to a Variant representing the value at the given key .
*/
typedef GDExtensionVariantPtr ( * GDExtensionInterfaceDictionaryOperatorIndex ) ( GDExtensionTypePtr p_self , GDExtensionConstVariantPtr p_key ) ;
/**
* @ name dictionary_operator_index_const
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a const pointer to a Variant in a Dictionary with the given key .
*
* @ param p_self A const pointer to a Dictionary object .
* @ param p_key A pointer to a Variant representing the key .
*
* @ return A const pointer to a Variant representing the value at the given key .
*/
typedef GDExtensionVariantPtr ( * GDExtensionInterfaceDictionaryOperatorIndexConst ) ( GDExtensionConstTypePtr p_self , GDExtensionConstVariantPtr p_key ) ;
/* INTERFACE: Object */
/**
* @ name object_method_bind_call
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Calls a method on an Object .
*
* @ param p_method_bind A pointer to the MethodBind representing the method on the Object ' s class .
* @ param p_instance A pointer to the Object .
* @ param p_args A pointer to a C array of Variants representing the arguments .
* @ param p_arg_count The number of arguments .
* @ param r_ret A pointer to Variant which will receive the return value .
* @ param r_error A pointer to a GDExtensionCallError struct that will receive error information .
*/
typedef void ( * GDExtensionInterfaceObjectMethodBindCall ) ( GDExtensionMethodBindPtr p_method_bind , GDExtensionObjectPtr p_instance , const GDExtensionConstVariantPtr * p_args , GDExtensionInt p_arg_count , GDExtensionUninitializedVariantPtr r_ret , GDExtensionCallError * r_error ) ;
/**
* @ name object_method_bind_ptrcall
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Calls a method on an Object ( using a " ptrcall " ) .
*
* @ param p_method_bind A pointer to the MethodBind representing the method on the Object ' s class .
* @ param p_instance A pointer to the Object .
* @ param p_args A pointer to a C array representing the arguments .
* @ param r_ret A pointer to the Object that will receive the return value .
*/
typedef void ( * GDExtensionInterfaceObjectMethodBindPtrcall ) ( GDExtensionMethodBindPtr p_method_bind , GDExtensionObjectPtr p_instance , const GDExtensionConstTypePtr * p_args , GDExtensionTypePtr r_ret ) ;
/**
* @ name object_destroy
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Destroys an Object .
*
* @ param p_o A pointer to the Object .
*/
typedef void ( * GDExtensionInterfaceObjectDestroy ) ( GDExtensionObjectPtr p_o ) ;
/**
* @ name global_get_singleton
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a global singleton by name .
*
* @ param p_name A pointer to a StringName with the singleton name .
*
* @ return A pointer to the singleton Object .
*/
typedef GDExtensionObjectPtr ( * GDExtensionInterfaceGlobalGetSingleton ) ( GDExtensionConstStringNamePtr p_name ) ;
/**
* @ name object_get_instance_binding
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer representing an Object ' s instance binding .
*
* @ param p_o A pointer to the Object .
* @ param p_library A token the library received by the GDExtension ' s entry point function .
* @ param p_callbacks A pointer to a GDExtensionInstanceBindingCallbacks struct .
*
* @ return
*/
typedef void * ( * GDExtensionInterfaceObjectGetInstanceBinding ) ( GDExtensionObjectPtr p_o , void * p_token , const GDExtensionInstanceBindingCallbacks * p_callbacks ) ;
/**
* @ name object_set_instance_binding
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Sets an Object ' s instance binding .
*
* @ param p_o A pointer to the Object .
* @ param p_library A token the library received by the GDExtension ' s entry point function .
* @ param p_binding A pointer to the instance binding .
* @ param p_callbacks A pointer to a GDExtensionInstanceBindingCallbacks struct .
*/
typedef void ( * GDExtensionInterfaceObjectSetInstanceBinding ) ( GDExtensionObjectPtr p_o , void * p_token , void * p_binding , const GDExtensionInstanceBindingCallbacks * p_callbacks ) ;
/**
* @ name object_set_instance
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Sets an extension class instance on a Object .
*
* @ param p_o A pointer to the Object .
* @ param p_classname A pointer to a StringName with the registered extension class ' s name .
* @ param p_instance A pointer to the extension class instance .
*/
typedef void ( * GDExtensionInterfaceObjectSetInstance ) ( GDExtensionObjectPtr p_o , GDExtensionConstStringNamePtr p_classname , GDExtensionClassInstancePtr p_instance ) ; /* p_classname should be a registered extension class and should extend the p_o object's class. */
2023-02-16 16:38:57 +01:00
/**
* @ name object_get_class_name
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-02-16 16:38:57 +01:00
*
* Gets the class name of an Object .
*
* @ param p_object A pointer to the Object .
* @ param p_library A pointer the library received by the GDExtension ' s entry point function .
* @ param r_class_name A pointer to a String to receive the class name .
*
* @ return true if successful in getting the class name ; otherwise false .
*/
typedef GDExtensionBool ( * GDExtensionInterfaceObjectGetClassName ) ( GDExtensionConstObjectPtr p_object , GDExtensionClassLibraryPtr p_library , GDExtensionUninitializedStringNamePtr r_class_name ) ;
2023-04-24 17:15:27 +02:00
/**
* @ name object_cast_to
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Casts an Object to a different type .
*
* @ param p_object A pointer to the Object .
* @ param p_class_tag A pointer uniquely identifying a built - in class in the ClassDB .
*
* @ return Returns a pointer to the Object , or NULL if it can ' t be cast to the requested type .
*/
typedef GDExtensionObjectPtr ( * GDExtensionInterfaceObjectCastTo ) ( GDExtensionConstObjectPtr p_object , void * p_class_tag ) ;
/**
* @ name object_get_instance_from_id
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets an Object by its instance ID .
*
* @ param p_instance_id The instance ID .
*
* @ return A pointer to the Object .
*/
typedef GDExtensionObjectPtr ( * GDExtensionInterfaceObjectGetInstanceFromId ) ( GDObjectInstanceID p_instance_id ) ;
/**
* @ name object_get_instance_id
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets the instance ID from an Object .
*
* @ param p_object A pointer to the Object .
*
* @ return The instance ID .
*/
typedef GDObjectInstanceID ( * GDExtensionInterfaceObjectGetInstanceId ) ( GDExtensionConstObjectPtr p_object ) ;
/* INTERFACE: Reference */
/**
* @ name ref_get_object
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets the Object from a reference .
*
* @ param p_ref A pointer to the reference .
*
* @ return A pointer to the Object from the reference or NULL .
*/
typedef GDExtensionObjectPtr ( * GDExtensionInterfaceRefGetObject ) ( GDExtensionConstRefPtr p_ref ) ;
/**
* @ name ref_set_object
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Sets the Object referred to by a reference .
*
* @ param p_ref A pointer to the reference .
* @ param p_object A pointer to the Object to refer to .
*/
typedef void ( * GDExtensionInterfaceRefSetObject ) ( GDExtensionRefPtr p_ref , GDExtensionObjectPtr p_object ) ;
/* INTERFACE: Script Instance */
/**
* @ name script_instance_create
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Creates a script instance that contains the given info and instance data .
*
* @ param p_info A pointer to a GDExtensionScriptInstanceInfo struct .
* @ 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 .
*
* @ return A pointer to a ScriptInstanceExtension object .
*/
typedef GDExtensionScriptInstancePtr ( * GDExtensionInterfaceScriptInstanceCreate ) ( const GDExtensionScriptInstanceInfo * p_info , GDExtensionScriptInstanceDataPtr p_instance_data ) ;
/* INTERFACE: ClassDB */
/**
* @ name classdb_construct_object
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Constructs an Object of the requested class .
*
* The passed class must be a built - in godot class , or an already - registered extension class . In both cases , object_set_instance ( ) should be called to fully initialize the object .
*
* @ param p_classname A pointer to a StringName with the class name .
*
* @ return A pointer to the newly created Object .
*/
typedef GDExtensionObjectPtr ( * GDExtensionInterfaceClassdbConstructObject ) ( GDExtensionConstStringNamePtr p_classname ) ;
/**
* @ name classdb_get_method_bind
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer to the MethodBind in ClassDB for the given class , method and hash .
*
* @ param p_classname A pointer to a StringName with the class name .
* @ param p_methodname A pointer to a StringName with the method name .
* @ param p_hash A hash representing the function signature .
*
* @ return A pointer to the MethodBind from ClassDB .
*/
typedef GDExtensionMethodBindPtr ( * GDExtensionInterfaceClassdbGetMethodBind ) ( GDExtensionConstStringNamePtr p_classname , GDExtensionConstStringNamePtr p_methodname , GDExtensionInt p_hash ) ;
/**
* @ name classdb_get_class_tag
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets a pointer uniquely identifying the given built - in class in the ClassDB .
*
* @ param p_classname A pointer to a StringName with the class name .
*
* @ return A pointer uniquely identifying the built - in class in the ClassDB .
*/
typedef void * ( * GDExtensionInterfaceClassdbGetClassTag ) ( GDExtensionConstStringNamePtr p_classname ) ;
/* INTERFACE: ClassDB Extension */
/**
* @ name classdb_register_extension_class
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Registers an extension class in the ClassDB .
*
* Provided struct can be safely freed once the function returns .
*
* @ param p_library A pointer the library received by the GDExtension ' s entry point function .
* @ param p_class_name A pointer to a StringName with the class name .
* @ param p_parent_class_name A pointer to a StringName with the parent class name .
* @ param p_extension_funcs A pointer to a GDExtensionClassCreationInfo struct .
*/
typedef void ( * GDExtensionInterfaceClassdbRegisterExtensionClass ) ( GDExtensionClassLibraryPtr p_library , GDExtensionConstStringNamePtr p_class_name , GDExtensionConstStringNamePtr p_parent_class_name , const GDExtensionClassCreationInfo * p_extension_funcs ) ;
/**
* @ name classdb_register_extension_class_method
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Registers a method on an extension class in the ClassDB .
*
* Provided struct can be safely freed once the function returns .
*
* @ param p_library A pointer the library received by the GDExtension ' s entry point function .
* @ param p_class_name A pointer to a StringName with the class name .
* @ param p_method_info A pointer to a GDExtensionClassMethodInfo struct .
*/
typedef void ( * GDExtensionInterfaceClassdbRegisterExtensionClassMethod ) ( GDExtensionClassLibraryPtr p_library , GDExtensionConstStringNamePtr p_class_name , const GDExtensionClassMethodInfo * p_method_info ) ;
/**
* @ name classdb_register_extension_class_integer_constant
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Registers an integer constant on an extension class in the ClassDB .
*
* @ param p_library A pointer the library received by the GDExtension ' s entry point function .
* @ param p_class_name A pointer to a StringName with the class name .
* @ param p_enum_name A pointer to a StringName with the enum name .
* @ param p_constant_name A pointer to a StringName with the constant name .
* @ param p_constant_value The constant value .
* @ param p_is_bitfield Whether or not this is a bit field .
*/
typedef void ( * GDExtensionInterfaceClassdbRegisterExtensionClassIntegerConstant ) ( GDExtensionClassLibraryPtr p_library , GDExtensionConstStringNamePtr p_class_name , GDExtensionConstStringNamePtr p_enum_name , GDExtensionConstStringNamePtr p_constant_name , GDExtensionInt p_constant_value , GDExtensionBool p_is_bitfield ) ;
/**
* @ name classdb_register_extension_class_property
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Registers a property on an extension class in the ClassDB .
*
* Provided struct can be safely freed once the function returns .
*
* @ param p_library A pointer the library received by the GDExtension ' s entry point function .
* @ param p_class_name A pointer to a StringName with the class name .
* @ param p_info A pointer to a GDExtensionPropertyInfo struct .
* @ param p_setter A pointer to a StringName with the name of the setter method .
* @ param p_getter A pointer to a StringName with the name of the getter method .
*/
typedef void ( * GDExtensionInterfaceClassdbRegisterExtensionClassProperty ) ( GDExtensionClassLibraryPtr p_library , GDExtensionConstStringNamePtr p_class_name , const GDExtensionPropertyInfo * p_info , GDExtensionConstStringNamePtr p_setter , GDExtensionConstStringNamePtr p_getter ) ;
/**
* @ name classdb_register_extension_class_property_group
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Registers a property group on an extension class in the ClassDB .
*
* @ param p_library A pointer the library received by the GDExtension ' s entry point function .
* @ param p_class_name A pointer to a StringName with the class name .
* @ param p_group_name A pointer to a String with the group name .
* @ param p_prefix A pointer to a String with the prefix used by properties in this group .
*/
typedef void ( * GDExtensionInterfaceClassdbRegisterExtensionClassPropertyGroup ) ( GDExtensionClassLibraryPtr p_library , GDExtensionConstStringNamePtr p_class_name , GDExtensionConstStringPtr p_group_name , GDExtensionConstStringPtr p_prefix ) ;
/**
* @ name classdb_register_extension_class_property_subgroup
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Registers a property subgroup on an extension class in the ClassDB .
*
* @ param p_library A pointer the library received by the GDExtension ' s entry point function .
* @ param p_class_name A pointer to a StringName with the class name .
* @ param p_subgroup_name A pointer to a String with the subgroup name .
* @ param p_prefix A pointer to a String with the prefix used by properties in this subgroup .
*/
typedef void ( * GDExtensionInterfaceClassdbRegisterExtensionClassPropertySubgroup ) ( GDExtensionClassLibraryPtr p_library , GDExtensionConstStringNamePtr p_class_name , GDExtensionConstStringPtr p_subgroup_name , GDExtensionConstStringPtr p_prefix ) ;
/**
* @ name classdb_register_extension_class_signal
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Registers a signal on an extension class in the ClassDB .
*
* Provided structs can be safely freed once the function returns .
*
* @ param p_library A pointer the library received by the GDExtension ' s entry point function .
* @ param p_class_name A pointer to a StringName with the class name .
* @ param p_signal_name A pointer to a StringName with the signal name .
* @ param p_argument_info A pointer to a GDExtensionPropertyInfo struct .
* @ param p_argument_count The number of arguments the signal receives .
*/
typedef void ( * GDExtensionInterfaceClassdbRegisterExtensionClassSignal ) ( GDExtensionClassLibraryPtr p_library , GDExtensionConstStringNamePtr p_class_name , GDExtensionConstStringNamePtr p_signal_name , const GDExtensionPropertyInfo * p_argument_info , GDExtensionInt p_argument_count ) ;
/**
* @ name classdb_unregister_extension_class
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Unregisters an extension class in the ClassDB .
*
* @ param p_library A pointer the library received by the GDExtension ' s entry point function .
* @ param p_class_name A pointer to a StringName with the class name .
*/
typedef void ( * GDExtensionInterfaceClassdbUnregisterExtensionClass ) ( GDExtensionClassLibraryPtr p_library , GDExtensionConstStringNamePtr p_class_name ) ; /* Unregistering a parent class before a class that inherits it will result in failure. Inheritors must be unregistered first. */
/**
* @ name get_library_path
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-04-24 17:15:27 +02:00
*
* Gets the path to the current GDExtension library .
*
* @ param p_library A pointer the library received by the GDExtension ' s entry point function .
* @ param r_path A pointer to a String which will receive the path .
2022-12-07 12:11:28 +01:00
*/
2023-04-24 17:15:27 +02:00
typedef void ( * GDExtensionInterfaceGetLibraryPath ) ( GDExtensionClassLibraryPtr p_library , GDExtensionUninitializedStringPtr r_path ) ;
2022-12-07 12:11:28 +01:00
2023-05-11 23:46:53 +02:00
/**
* @ name editor_add_plugin
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-05-11 23:46:53 +02:00
*
* Adds an editor plugin .
*
* It ' s safe to call during initialization .
*
* @ param p_class_name A pointer to a StringName with the name of a class ( descending from EditorPlugin ) which is already registered with ClassDB .
*/
typedef void ( * GDExtensionInterfaceEditorAddPlugin ) ( GDExtensionConstStringNamePtr p_class_name ) ;
/**
* @ name editor_remove_plugin
2023-06-21 12:47:48 +02:00
* @ since 4.1
2023-05-11 23:46:53 +02:00
*
* Removes an editor plugin .
*
* @ param p_class_name A pointer to a StringName with the name of a class that was previously added as an editor plugin .
*/
typedef void ( * GDExtensionInterfaceEditorRemovePlugin ) ( GDExtensionConstStringNamePtr p_class_name ) ;
2022-12-07 12:11:28 +01:00
# ifdef __cplusplus
}
# endif
# endif // GDEXTENSION_INTERFACE_H