Optimize auto generated Variant Types in bindings to reduce dynamic memory allocs in game builds
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user