using AssetRipper.SourceGenerated.Extensions.Enums.Shader.VertexFormat; using AssetRipper.SourceGenerated.Subclasses.ChannelInfo; namespace AssetRipper.SourceGenerated.Extensions { /* /// /// Stream index /// BinaryData:[Stream0][Align][Stream1][Align]... /// byte Stream { get; set; } /// /// Offset inside stream /// Stream:[FirstVertex: VertexOffset,NormalOffset,TangentOffset...][SecondVertex: VertexOffset,NormalOffset,TangentOffset...]... /// byte Offset { get; set; } /// /// Data format: float, int, byte /// byte Format { get; set; } /// /// An unprocessed byte value containing the data dimension /// byte Dimension { get; set; } */ public static class ChannelInfoExtensions { public static bool IsSet(this IChannelInfo channelInfo) => channelInfo.Dimension > 0; /// /// Data dimention: Vector3, Vector2, Vector1 /// public static byte GetDataDimension(this IChannelInfo channelInfo) { return (byte)(channelInfo.Dimension & 0b00001111); } /// /// Data dimention: Vector3, Vector2, Vector1 /// public static void SetDataDimension(this IChannelInfo channelInfo, byte value) { channelInfo.Dimension = (byte)(channelInfo.Dimension & 0b11110000 | value & 0b00001111); } public static byte GetStride(this IChannelInfo channelInfo, UnityVersion version) { return channelInfo.GetVertexFormat(version).CalculateStride(version, channelInfo.GetDataDimension()); } public static VertexFormat GetVertexFormat(this IChannelInfo channelInfo, UnityVersion version) { if (VertexFormatExtensions.VertexFormat2019Relevant(version)) { return ((VertexFormat2019)channelInfo.Format).ToVertexFormat(); } else if (VertexFormatExtensions.VertexFormat2017Relevant(version)) { return ((VertexFormat2017)channelInfo.Format).ToVertexFormat(); } else { return ((VertexChannelFormat)channelInfo.Format).ToVertexFormat(); } } } }