From bdeb89538cf129b71051444eefbf0a223994ceec Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Wed, 3 Jun 2026 11:05:17 +0200 Subject: [PATCH] Optimize auto generated Variant Types in bindings to reduce dynamic memory allocs in game builds --- .../Flax.Build/Bindings/BindingsGenerator.Cpp.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs index 6dd2aba6f..e67f66cde 100644 --- a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs +++ b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs @@ -203,11 +203,11 @@ namespace Flax.Build.Bindings var fullname = apiType.FullNameManaged; if (apiType.IsEnum) - return $"Variant::Enum(VariantType(VariantType::Enum, StringAnsiView(\"{fullname}\", {fullname.Length})), {value})"; + return $"Variant::Enum(VariantType(VariantType::Enum, StringAnsiView(\"{fullname}\", {fullname.Length}), !USE_EDITOR), {value})"; if (apiType.IsStruct && !CppInBuildVariantStructures.Contains(apiType.Name)) { if (apiType.IsInBuild) - return $"Variant::Structure(VariantType(VariantType::Structure, StringAnsiView(\"{fullname}\", {fullname.Length})), {(typeInfo.IsPtr ? "*" + value : value)})"; + return $"Variant::Structure(VariantType(VariantType::Structure, StringAnsiView(\"{fullname}\", {fullname.Length}), !USE_EDITOR), {(typeInfo.IsPtr ? "*" + value : value)})"; return $"Variant::Structure(VariantType(VariantType::Structure, {apiType.FullNameNative}::TypeInitializer.GetType()), {(typeInfo.IsPtr ? "*" + value : value)})"; } } @@ -269,7 +269,7 @@ namespace Flax.Build.Bindings { var elementType = FindApiTypeInfo(buildData, typeInfo.GenericArgs[0], caller); var elementName = $"{(elementType != null ? elementType.FullNameManaged : typeInfo.GenericArgs[0].Type)}[]"; - return $"VariantType(VariantType::Array, StringAnsiView(\"{elementName}\", {elementName.Length}))"; + return $"VariantType(VariantType::Array, StringAnsiView(\"{elementName}\", {elementName.Length}), !USE_EDITOR)"; } if (typeInfo.Type == "Dictionary" && typeInfo.GenericArgs != null) return "VariantType(VariantType::Dictionary)"; @@ -280,11 +280,11 @@ namespace Flax.Build.Bindings { var fullname = apiType.FullNameManaged; if (apiType.IsEnum) - return $"VariantType(VariantType::Enum, StringAnsiView(\"{fullname}\", {fullname.Length}))"; + return $"VariantType(VariantType::Enum, StringAnsiView(\"{fullname}\", {fullname.Length}), !USE_EDITOR)"; if (apiType.IsStruct) { if (apiType.IsInBuild) - return $"VariantType(VariantType::Structure, StringAnsiView(\"{fullname}\", {fullname.Length}))"; + return $"VariantType(VariantType::Structure, StringAnsiView(\"{fullname}\", {fullname.Length}), !USE_EDITOR)"; return $"VariantType(VariantType::Structure, {apiType.FullNameNative}::TypeInitializer.GetType())"; } if (apiType.IsClass) @@ -3103,7 +3103,7 @@ namespace Flax.Build.Bindings header.Append(" Variant result;").AppendLine(); var apiType = FindApiTypeInfo(buildData, valueType, moduleInfo); var elementName = $"{(apiType != null ? apiType.FullNameManaged : valueType.Type)}[]"; - header.Append($" result.SetType(VariantType(VariantType::Array, StringAnsiView(\"{elementName}\", {elementName.Length})));").AppendLine(); + header.Append($" result.SetType(VariantType(VariantType::Array, StringAnsiView(\"{elementName}\", {elementName.Length}), !USE_EDITOR));").AppendLine(); header.Append(" auto* array = reinterpret_cast*>(result.AsData);").AppendLine(); header.Append(" array->Resize(length);").AppendLine(); header.Append(" for (int32 i = 0; i < length; i++)").AppendLine();