mirror of
https://github.com/godotengine/godot-cpp.git
synced 2026-01-03 18:09:13 +03:00
Uses StringName in GDExtension perf critical instance creation & method/properties setter/getter
This commit is contained in:
@@ -687,20 +687,24 @@ def generate_builtin_class_source(builtin_api, size, used_classes, fully_used_cl
|
||||
f"\t_method_bindings.destructor = internal::gdn_interface->variant_get_ptr_destructor({enum_type_name});"
|
||||
)
|
||||
|
||||
result.append(f"StringName __name;")
|
||||
|
||||
if "methods" in builtin_api:
|
||||
for method in builtin_api["methods"]:
|
||||
# TODO: Add error check for hash mismatch.
|
||||
result.append(f'\t__name = StringName("{method["name"]}");')
|
||||
result.append(
|
||||
f'\t_method_bindings.method_{method["name"]} = internal::gdn_interface->variant_get_ptr_builtin_method({enum_type_name}, "{method["name"]}", {method["hash"]});'
|
||||
f'\t_method_bindings.method_{method["name"]} = internal::gdn_interface->variant_get_ptr_builtin_method({enum_type_name}, (void *)&__name, {method["hash"]});'
|
||||
)
|
||||
|
||||
if "members" in builtin_api:
|
||||
for member in builtin_api["members"]:
|
||||
result.append(f'\t__name = StringName("{member["name"]}");')
|
||||
result.append(
|
||||
f'\t_method_bindings.member_{member["name"]}_setter = internal::gdn_interface->variant_get_ptr_setter({enum_type_name}, "{member["name"]}");'
|
||||
f'\t_method_bindings.member_{member["name"]}_setter = internal::gdn_interface->variant_get_ptr_setter({enum_type_name}, (void *)&__name);'
|
||||
)
|
||||
result.append(
|
||||
f'\t_method_bindings.member_{member["name"]}_getter = internal::gdn_interface->variant_get_ptr_getter({enum_type_name}, "{member["name"]}");'
|
||||
f'\t_method_bindings.member_{member["name"]}_getter = internal::gdn_interface->variant_get_ptr_getter({enum_type_name}, (void *)&__name);'
|
||||
)
|
||||
|
||||
if "indexing_return_type" in builtin_api:
|
||||
@@ -1292,8 +1296,9 @@ def generate_engine_class_source(class_api, used_classes, fully_used_classes, us
|
||||
|
||||
if is_singleton:
|
||||
result.append(f"{class_name} *{class_name}::get_singleton() {{")
|
||||
result.append(f'\tconst StringName __class_name = {class_name}::get_class_static();')
|
||||
result.append(
|
||||
f'\tstatic GDNativeObjectPtr singleton_obj = internal::gdn_interface->global_get_singleton("{class_name}");'
|
||||
f"\tstatic GDNativeObjectPtr singleton_obj = internal::gdn_interface->global_get_singleton((void *)&__class_name);"
|
||||
)
|
||||
result.append("#ifdef DEBUG_ENABLED")
|
||||
result.append("\tERR_FAIL_COND_V(singleton_obj == nullptr, nullptr);")
|
||||
@@ -1318,8 +1323,10 @@ def generate_engine_class_source(class_api, used_classes, fully_used_classes, us
|
||||
result.append(method_signature + " {")
|
||||
|
||||
# Method body.
|
||||
result.append(f'\tconst StringName __class_name = {class_name}::get_class_static();')
|
||||
result.append(f'\tconst StringName __method_name = "{method["name"]}";')
|
||||
result.append(
|
||||
f'\tstatic GDNativeMethodBindPtr ___method_bind = internal::gdn_interface->classdb_get_method_bind("{class_name}", "{method["name"]}", {method["hash"]});'
|
||||
f'\tstatic GDNativeMethodBindPtr ___method_bind = internal::gdn_interface->classdb_get_method_bind((void *)&__class_name, (void *)&__method_name, {method["hash"]});'
|
||||
)
|
||||
method_call = "\t"
|
||||
has_return = "return_value" in method and method["return_value"]["type"] != "void"
|
||||
@@ -1566,8 +1573,9 @@ def generate_utility_functions(api, output_dir):
|
||||
|
||||
# Function body.
|
||||
|
||||
source.append(f'\tconst StringName __function_name = "{function["name"]}";')
|
||||
source.append(
|
||||
f'\tstatic GDNativePtrUtilityFunction ___function = internal::gdn_interface->variant_get_ptr_utility_function("{function["name"]}", {function["hash"]});'
|
||||
f'\tstatic GDNativePtrUtilityFunction ___function = internal::gdn_interface->variant_get_ptr_utility_function((void *)&__function_name, {function["hash"]});'
|
||||
)
|
||||
has_return = "return_type" in function and function["return_type"] != "void"
|
||||
if has_return:
|
||||
|
||||
Reference in New Issue
Block a user