public static ChannelInfo GenerateChannelInfo(Version instanceVersion, StreamInfo[] origin, ShaderChannel channelType) { ChannelInfo instance = new ChannelInfo(); ShaderChannelV4 channelv4 = channelType.ToShaderChannelV4(); int streamIndex = origin.IndexOf(t => t.IsMatch(channelv4)); if (streamIndex >= 0) { byte offset = 0; ref StreamInfo stream = ref origin[streamIndex]; for (ShaderChannelV4 i = 0; i < channelv4; i++) { if (stream.IsMatch(i)) { offset += i.ToShaderChannel().GetStride(); } } instance.Stream = (byte)streamIndex; instance.Offset = offset; instance.Format = channelType.GetVertexFormat(instanceVersion).ToFormat(instanceVersion); instance.RawDimension = channelType.GetDimention(instanceVersion); }