예제 #1
0
        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}");
            }
        }
예제 #2
0
        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);
            }
예제 #3
0
 public bool IsMatch(ShaderChannelV4 channel)
 {
     return((ChannelMask & (1 << (int)channel)) != 0);
 }