virtualx-engine/core/extension/gdextension_interface.h
Jan Haller 618507eb89 GDExtension: Uninitialized*Ptr for constructors/converters using placement new
These methods construct their destination in-place, but the parameters are not declared using the `Uninitialized*Ptr` pointer types.
2023-06-18 23:14:10 +02:00

2168 lines
87 KiB
C++

/**************************************************************************/
/* 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. */
/**************************************************************************/
#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;
// 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 ;-)
typedef void *GDExtensionVariantPtr;
typedef const void *GDExtensionConstVariantPtr;
typedef void *GDExtensionUninitializedVariantPtr;
typedef void *GDExtensionStringNamePtr;
typedef const void *GDExtensionConstStringNamePtr;
typedef void *GDExtensionUninitializedStringNamePtr;
typedef void *GDExtensionStringPtr;
typedef const void *GDExtensionConstStringPtr;
typedef void *GDExtensionUninitializedStringPtr;
typedef void *GDExtensionObjectPtr;
typedef const void *GDExtensionConstObjectPtr;
typedef void *GDExtensionUninitializedObjectPtr;
typedef void *GDExtensionTypePtr;
typedef const void *GDExtensionConstTypePtr;
typedef void *GDExtensionUninitializedTypePtr;
typedef const void *GDExtensionMethodBindPtr;
typedef int64_t GDExtensionInt;
typedef uint8_t GDExtensionBool;
typedef uint64_t GDObjectInstanceID;
typedef void *GDExtensionRefPtr;
typedef const void *GDExtensionConstRefPtr;
/* 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;
typedef void (*GDExtensionVariantFromTypeConstructorFunc)(GDExtensionUninitializedVariantPtr, GDExtensionTypePtr);
typedef void (*GDExtensionTypeFromVariantConstructorFunc)(GDExtensionUninitializedTypePtr, GDExtensionVariantPtr);
typedef void (*GDExtensionPtrOperatorEvaluator)(GDExtensionConstTypePtr p_left, GDExtensionConstTypePtr p_right, GDExtensionTypePtr r_result);
typedef void (*GDExtensionPtrBuiltInMethod)(GDExtensionTypePtr p_base, const GDExtensionConstTypePtr *p_args, GDExtensionTypePtr r_return, int p_argument_count);
typedef void (*GDExtensionPtrConstructor)(GDExtensionUninitializedTypePtr p_base, const GDExtensionConstTypePtr *p_args);
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);
typedef void (*GDExtensionPtrUtilityFunction)(GDExtensionTypePtr r_return, const GDExtensionConstTypePtr *p_args, int p_argument_count);
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);
typedef void (*GDExtensionClassCallVirtual)(GDExtensionClassInstancePtr p_instance, const GDExtensionConstTypePtr *p_args, GDExtensionTypePtr r_ret);
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;
typedef void (*GDExtensionClassMethodCall)(void *method_userdata, GDExtensionClassInstancePtr p_instance, const GDExtensionConstVariantPtr *p_args, GDExtensionInt p_argument_count, GDExtensionVariantPtr r_return, GDExtensionCallError *r_error);
typedef void (*GDExtensionClassMethodValidatedCall)(void *method_userdata, GDExtensionClassInstancePtr p_instance, const GDExtensionConstVariantPtr *p_args, GDExtensionVariantPtr r_return);
typedef void (*GDExtensionClassMethodPtrCall)(void *method_userdata, GDExtensionClassInstancePtr p_instance, const GDExtensionConstTypePtr *p_args, GDExtensionTypePtr r_ret);
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);
typedef void (*GDExtensionScriptInstanceCall)(GDExtensionScriptInstanceDataPtr p_self, GDExtensionConstStringNamePtr p_method, const GDExtensionConstVariantPtr *p_args, GDExtensionInt p_argument_count, GDExtensionVariantPtr r_return, GDExtensionCallError *r_error);
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;
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
*
* 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
*
* 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
*
* 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
*
* Frees memory.
*
* @param p_ptr A pointer to the previously allocated memory.
*/
typedef void (*GDExtensionInterfaceMemFree)(void *p_ptr);
/* INTERFACE: Godot Core */
/**
* @name print_error
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* Creates a new Variant containing nil.
*
* @param r_dest A pointer to the destination Variant.
*/
typedef void (*GDExtensionInterfaceVariantNewNil)(GDExtensionUninitializedVariantPtr r_dest);
/**
* @name variant_destroy
*
* Destroys a Variant.
*
* @param p_self A pointer to the Variant to destroy.
*/
typedef void (*GDExtensionInterfaceVariantDestroy)(GDExtensionVariantPtr p_self);
/**
* @name variant_call
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* Destroys an Object.
*
* @param p_o A pointer to the Object.
*/
typedef void (*GDExtensionInterfaceObjectDestroy)(GDExtensionObjectPtr p_o);
/**
* @name global_get_singleton
*
* 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
*
* 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
*
* 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
*
* 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. */
/**
* @name object_get_class_name
*
* 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);
/**
* @name object_cast_to
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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
*
* 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.
*/
typedef void (*GDExtensionInterfaceGetLibraryPath)(GDExtensionClassLibraryPtr p_library, GDExtensionUninitializedStringPtr r_path);
/**
* @name editor_add_plugin
*
* 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
*
* 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);
#ifdef __cplusplus
}
#endif
#endif // GDEXTENSION_INTERFACE_H