public FieldInfo( ParticleFieldType type, int numElements, int offset, object defaultValue )
            {
                m_Type = type;
                m_NumElements = numElements;
                m_Size = ParticleFieldTypeSize( type ) * numElements;
                m_Offset = offset;
                m_DefaultValues = new object[ numElements ];

                if ( defaultValue is Array )
                {
                    object[] src = ( object[] )defaultValue;
                    for ( int i = 0; i < numElements; ++i )
                    {
                        m_DefaultValues[ i ] = src[ i ];
                    }
                }
                else
                {
                    m_DefaultValues = new object[ numElements ];
                    for ( int i = 0; i < numElements; ++i )
                    {
                        m_DefaultValues[ i ] = defaultValue;
                    }
                }
            }
        /// <summary>
        /// Adds a field to the particle definition
        /// </summary>
        public void AddField( string name, ParticleFieldType type, int numElements, object defaultValue )
        {
            FieldInfo field;
            if ( m_Fields.TryGetValue( name, out field ) )
            {
                if ( type != field.Type )
                {
                    throw new ArgumentException( string.Format( "Field \"{0}\" was already defined using type {1}, not type {2}", name, field.Type, type ), "type" );
                }
                if ( field.NumElements != numElements )
                {
                    throw new ArgumentException( string.Format( "Field \"{0}\" was already defined with {1} elements of type {2}, not {3}", name, field.NumElements, type, numElements ), "numElements" );
                }
                return;
            }

            m_BuildBuffer = true;
            field = new FieldInfo( type, numElements, m_Stride, defaultValue );
            m_Fields.Add( name, field );
            m_Stride += field.Size;
        }
 private static int ParticleFieldTypeSize( ParticleFieldType type )
 {
     switch ( type )
     {
         case ParticleFieldType.Int32 : return sizeof( int );
         case ParticleFieldType.Float32 : return sizeof( float );
     }
     throw new NotSupportedException( "Unsupported field type " + type );
 }