Fix incorrect array marshalling in few Editor methods

This commit is contained in:
2022-12-13 20:24:39 +02:00
parent ff438a6219
commit 551c58db4f
4 changed files with 18 additions and 12 deletions

View File

@@ -1554,7 +1554,7 @@ namespace FlaxEditor
internal static partial bool Internal_CookMeshCollision(string path, CollisionDataType type, IntPtr model, int modelLodIndex, uint materialSlotsMask, ConvexMeshGenerationFlags convexFlags, int convexVertexLimit);
[LibraryImport("FlaxEngine", EntryPoint = "FlaxEditor.Editor::Internal_GetCollisionWires", StringMarshalling = StringMarshalling.Custom, StringMarshallingCustomType = typeof(FlaxEngine.StringMarshaller))]
internal static partial void Internal_GetCollisionWires(IntPtr collisionData, [MarshalUsing(typeof(FlaxEngine.ArrayMarshaller<,>), ConstantElementCount = 1)] out Float3[] triangles, [MarshalUsing(typeof(FlaxEngine.ArrayMarshaller<,>), ConstantElementCount = 1)] out int[] indices);
internal static partial void Internal_GetCollisionWires(IntPtr collisionData, [MarshalUsing(typeof(FlaxEngine.ArrayMarshaller<,>), CountElementName = "trianglesCount")] out Float3[] triangles, [MarshalUsing(typeof(FlaxEngine.ArrayMarshaller<,>), CountElementName = "indicesCount")] out int[] indices, out int trianglesCount, out int indicesCount);
[LibraryImport("FlaxEngine", EntryPoint = "FlaxEditor.Editor::Internal_GetEditorBoxWithChildren", StringMarshalling = StringMarshalling.Custom, StringMarshallingCustomType = typeof(FlaxEngine.StringMarshaller))]
internal static partial void Internal_GetEditorBoxWithChildren(IntPtr obj, out BoundingBox resultAsRef);
@@ -1602,12 +1602,12 @@ namespace FlaxEditor
internal static partial void Internal_RunVisualScriptBreakpointLoopTick(float deltaTime);
[LibraryImport("FlaxEngine", EntryPoint = "FlaxEditor.Editor::Internal_GetVisualScriptLocals", StringMarshalling = StringMarshalling.Custom, StringMarshallingCustomType = typeof(FlaxEngine.StringMarshaller))]
[return: MarshalUsing(typeof(FlaxEngine.ArrayMarshaller<,>), ConstantElementCount = 1)]
internal static partial VisualScriptLocal[] Internal_GetVisualScriptLocals();
[return: MarshalUsing(typeof(FlaxEngine.ArrayMarshaller<,>), CountElementName = "localsCount")]
internal static partial VisualScriptLocal[] Internal_GetVisualScriptLocals(out int localsCount);
[LibraryImport("FlaxEngine", EntryPoint = "FlaxEditor.Editor::Internal_GetVisualScriptStackFrames", StringMarshalling = StringMarshalling.Custom, StringMarshallingCustomType = typeof(FlaxEngine.StringMarshaller))]
[return: MarshalUsing(typeof(FlaxEngine.ArrayMarshaller<,>), ConstantElementCount = 1)]
internal static partial VisualScriptStackFrame[] Internal_GetVisualScriptStackFrames();
[return: MarshalUsing(typeof(FlaxEngine.ArrayMarshaller<,>), CountElementName = "stackFrameCount")]
internal static partial VisualScriptStackFrame[] Internal_GetVisualScriptStackFrames(out int stackFrameCount);
[LibraryImport("FlaxEngine", EntryPoint = "FlaxEditor.Editor::Internal_GetVisualScriptPreviousScopeFrame", StringMarshalling = StringMarshalling.Custom, StringMarshallingCustomType = typeof(FlaxEngine.StringMarshaller))]
internal static partial VisualScriptStackFrame Internal_GetVisualScriptPreviousScopeFrame();

View File

@@ -419,7 +419,7 @@ public:
return 0;
int32 count = 0;
const int32 maxCount = outArraySize;//(int32)mono_array_length(*outMessages);
const int32 maxCount = outArraySize;
byte* ptr = CachedLogData.Get();
byte* end = ptr + CachedLogData.Count();
@@ -798,7 +798,7 @@ public:
#endif
}
static void GetCollisionWires(CollisionData* collisionData, MonoArray** triangles, MonoArray** indices)
static void GetCollisionWires(CollisionData* collisionData, MonoArray** triangles, MonoArray** indices, int* trianglesCount, int* indicesCount)
{
SCRIPTING_EXPORT("FlaxEditor.Editor::Internal_GetCollisionWires")
if (!collisionData || collisionData->WaitForLoaded() || collisionData->GetOptions().Type == CollisionDataType::None)
@@ -822,6 +822,8 @@ public:
mono_array_set(*indices, int32, iI++, i + 1);
mono_array_set(*indices, int32, iI++, i);
}
*trianglesCount = debugLines.Count();
*indicesCount = linesCount * 3;
}
static void GetEditorBoxWithChildren(Actor* obj, BoundingBox* result)
@@ -960,10 +962,11 @@ public:
int32 BoxId;
};
static MonoArray* GetVisualScriptLocals()
static MonoArray* GetVisualScriptLocals(int* localsCount)
{
SCRIPTING_EXPORT("FlaxEditor.Editor::Internal_GetVisualScriptLocals")
MonoArray* result = nullptr;
*localsCount = 0;
const auto stack = VisualScripting::GetThreadStackTop();
if (stack && stack->Scope)
{
@@ -998,6 +1001,7 @@ public:
local.ValueTypeName = MUtils::ToString(v.Value.Type.GetTypeName());
mono_array_set(result, VisualScriptLocalManaged, stack->Scope->Parameters.Length() + i, local);
}
*localsCount = count;
}
return result;
}
@@ -1009,10 +1013,11 @@ public:
int32 BoxId;
};
static MonoArray* GetVisualScriptStackFrames()
static MonoArray* GetVisualScriptStackFrames(int* stackFramesCount)
{
SCRIPTING_EXPORT("FlaxEditor.Editor::Internal_GetVisualScriptStackFrames")
MonoArray* result = nullptr;
*stackFramesCount = 0;
const auto stack = VisualScripting::GetThreadStackTop();
if (stack)
{
@@ -1038,6 +1043,7 @@ public:
s = s->PreviousFrame;
count++;
}
*stackFramesCount = count;
}
return result;
}

View File

@@ -236,7 +236,7 @@ namespace FlaxEditor.Windows.Assets
_collisionWiresModel = FlaxEngine.Content.CreateVirtualAsset<Model>();
_collisionWiresModel.SetupLODs(new[] { 1 });
}
Editor.Internal_GetCollisionWires(FlaxEngine.Object.GetUnmanagedPtr(Asset), out var triangles, out var indices);
Editor.Internal_GetCollisionWires(FlaxEngine.Object.GetUnmanagedPtr(Asset), out var triangles, out var indices, out var _, out var _);
if (triangles != null && indices != null)
_collisionWiresModel.LODs[0].Meshes[0].UpdateMesh(triangles, indices);
else

View File

@@ -818,7 +818,7 @@ namespace FlaxEditor.Windows.Assets
var state = (BreakpointHangState)Editor.Instance.Simulation.BreakpointHangTag;
if (state.Locals == null)
{
state.Locals = Editor.Internal_GetVisualScriptLocals();
state.Locals = Editor.Internal_GetVisualScriptLocals(out var _);
Editor.Instance.Simulation.BreakpointHangTag = state;
}
return state;
@@ -829,7 +829,7 @@ namespace FlaxEditor.Windows.Assets
var state = (BreakpointHangState)Editor.Instance.Simulation.BreakpointHangTag;
if (state.StackFrames == null)
{
state.StackFrames = Editor.Internal_GetVisualScriptStackFrames();
state.StackFrames = Editor.Internal_GetVisualScriptStackFrames(out var _);
Editor.Instance.Simulation.BreakpointHangTag = state;
}
return state;