Exemple #1
0
        private void GetChannels(int[] version)
        {
            m_Channels = new ChannelInfo[6];
            for (int i = 0; i < 6; i++)
            {
                m_Channels[i] = new ChannelInfo();
            }
            for (var s = 0; s < m_Streams.Length; s++)
            {
                var  m_Stream    = m_Streams[s];
                var  channelMask = new BitArray(new[] { (int)m_Stream.channelMask });
                byte offset      = 0;
                for (int i = 0; i < 6; i++)
                {
                    if (channelMask.Get(i))
                    {
                        var m_Channel = m_Channels[i];
                        m_Channel.stream = (byte)s;
                        m_Channel.offset = offset;
                        switch (i)
                        {
                        case 0:                      //kShaderChannelVertex
                        case 1:                      //kShaderChannelNormal
                            m_Channel.format    = 0; //kChannelFormatFloat
                            m_Channel.dimension = 3;
                            break;

                        case 2:                      //kShaderChannelColor
                            m_Channel.format    = 2; //kChannelFormatColor
                            m_Channel.dimension = 4;
                            break;

                        case 3:                      //kShaderChannelTexCoord0
                        case 4:                      //kShaderChannelTexCoord1
                            m_Channel.format    = 0; //kChannelFormatFloat
                            m_Channel.dimension = 2;
                            break;

                        case 5:                      //kShaderChannelTangent
                            m_Channel.format    = 0; //kChannelFormatFloat
                            m_Channel.dimension = 4;
                            break;
                        }
                        offset += (byte)(m_Channel.dimension * MeshHelper.GetFormatSize(version, m_Channel.format));
                    }
                }
            }
        }
Exemple #2
0
        private void GetStreams(int[] version)
        {
            var streamCount = m_Channels.Max(x => x.stream) + 1;

            m_Streams = new StreamInfo[streamCount];
            uint offset = 0;

            for (int s = 0; s < streamCount; s++)
            {
                uint chnMask = 0;
                uint stride  = 0;
                for (int chn = 0; chn < m_Channels.Length; chn++)
                {
                    var m_Channel = m_Channels[chn];
                    if (m_Channel.stream == s)
                    {
                        if (m_Channel.dimension > 0)
                        {
                            chnMask |= 1u << chn;
                            stride  += m_Channel.dimension * MeshHelper.GetFormatSize(version, m_Channel.format);
                        }
                    }
                }
                m_Streams[s] = new StreamInfo
                {
                    channelMask = chnMask,
                    offset      = offset,
                    stride      = stride,
                    dividerOp   = 0,
                    frequency   = 0
                };
                offset += m_VertexCount * stride;
                //static size_t AlignStreamSize (size_t size) { return (size + (kVertexStreamAlign-1)) & ~(kVertexStreamAlign-1); }
                offset = (offset + (16u - 1u)) & ~(16u - 1u);
            }
        }