using AssetRipper.Assets.Generics; using AssetRipper.SourceGenerated.Classes.ClassID_43; using AssetRipper.SourceGenerated.Enums; using AssetRipper.SourceGenerated.Subclasses.SubMesh; namespace AssetRipper.SourceGenerated.Extensions; /// /// /// /// /// Offset in the index buffer. /// Offset in the vertex list. /// /// /// /// /// public record struct SubMeshData( uint BaseVertex, int FirstIndex, int FirstVertex, int IndexCount, int TriangleCount, int VertexCount, MeshTopology Topology, Bounds LocalBounds) { public static SubMeshData Create(ISubMesh subMesh, IndexFormat indexFormat) { return new SubMeshData( subMesh.BaseVertex, (int)subMesh.FirstByte / indexFormat.Size, (int)subMesh.FirstVertex, (int)subMesh.IndexCount, (int)subMesh.TriangleCount, (int)subMesh.VertexCount, subMesh.GetTopology(), subMesh.LocalAABB); } public static SubMeshData[] Create(IMesh mesh) { AccessListBase list = mesh.SubMeshes; if (list.Count == 0) { return []; } else { SubMeshData[] array = new SubMeshData[list.Count]; for (int i = 0; i < list.Count; i++) { array[i] = Create(list[i], mesh.IndexFormatE); } return array; } } public readonly void CopyTo(ISubMesh destination, IndexFormat indexFormat) { destination.BaseVertex = BaseVertex; destination.FirstByte = (uint)(FirstIndex * indexFormat.Size); destination.FirstVertex = (uint)FirstVertex; destination.IndexCount = (uint)IndexCount; destination.TriangleCount = (uint)TriangleCount; destination.VertexCount = (uint)VertexCount; destination.SetTopology(Topology); LocalBounds.CopyTo(destination.LocalAABB); } }