public static ShaderChannel ToShaderChannel(this ShaderChannelV4 _this) { switch (_this) { case ShaderChannelV4.Vertex: return(ShaderChannel.Vertex); case ShaderChannelV4.Normal: return(ShaderChannel.Normal); case ShaderChannelV4.Color: return(ShaderChannel.Color); case ShaderChannelV4.UV0: return(ShaderChannel.UV0); case ShaderChannelV4.UV1: return(ShaderChannel.UV1); case ShaderChannelV4.Tangent: return(ShaderChannel.Tangent); default: throw new Exception($"Unsupported channel type {_this}"); } }
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); }
public bool IsMatch(ShaderChannelV4 channel) { return((ChannelMask & (1 << (int)channel)) != 0); }