diff --git a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs index d41ecd501..26fa55231 100644 --- a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs +++ b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs @@ -886,7 +886,7 @@ namespace Flax.Build.Bindings contents.Append("static "); string type; - if (fieldInfo.NoArray && fieldInfo.Type.IsArray) + if (fieldInfo.Type.IsArray && (fieldInfo.NoArray || structureInfo.IsPod)) { // Fixed-size array that needs to be inlined into structure instead of passing it as managed array fieldInfo.Type.IsArray = false; diff --git a/Source/Tools/Flax.Build/Bindings/FieldInfo.cs b/Source/Tools/Flax.Build/Bindings/FieldInfo.cs index d01cde5e7..4a71a6f6b 100644 --- a/Source/Tools/Flax.Build/Bindings/FieldInfo.cs +++ b/Source/Tools/Flax.Build/Bindings/FieldInfo.cs @@ -18,6 +18,18 @@ namespace Flax.Build.Bindings public bool HasDefaultValue => !string.IsNullOrEmpty(DefaultValue); + /// + /// Gets a value indicating whether this type is POD (plain old data). + /// + public bool IsPod(Builder.BuildData buildData, ApiTypeInfo caller) + { + // Fixed array in C++ is converted into managed array in C# by default (char Data[100] -> char[] Data) + if (Type.IsArray && !NoArray) + return false; + + return Type.IsPod(buildData, caller); + } + public override void Write(BinaryWriter writer) { BindingsGenerator.Write(writer, Type); diff --git a/Source/Tools/Flax.Build/Bindings/StructureInfo.cs b/Source/Tools/Flax.Build/Bindings/StructureInfo.cs index 882ed6295..5b664cc09 100644 --- a/Source/Tools/Flax.Build/Bindings/StructureInfo.cs +++ b/Source/Tools/Flax.Build/Bindings/StructureInfo.cs @@ -37,7 +37,7 @@ namespace Flax.Build.Bindings for (int i = 0; _isPod && i < Fields.Count; i++) { var field = Fields[i]; - if (!field.IsStatic && !field.Type.IsPod(buildData, this)) + if (!field.IsStatic && !field.IsPod(buildData, this)) { _isPod = false; }