Optimize auto generated Variant Types in bindings to reduce dynamic memory allocs in game builds

This commit is contained in:
2026-06-03 11:05:17 +02:00
parent 0f86537099
commit bdeb89538c
@@ -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<Array<Variant, HeapAllocation>*>(result.AsData);").AppendLine();
header.Append(" array->Resize(length);").AppendLine();
header.Append(" for (int32 i = 0; i < length; i++)").AppendLine();