public static H1IndexBuffer ProcessIndexBuffer(uint[] indices)
        {
            int size = Utilities.SizeOf(indices);

            // create index buffer
            H1IndexBuffer newIndexBuffer = H1Global <H1ManagedRenderer> .Instance.CreateIndexBuffer(Convert.ToUInt32(size));

            // write the data to the index buffer
            newIndexBuffer.WriteData(indices);

            return(newIndexBuffer);
        }
        // private methods
        private void ProcessMeshContext(H1MeshContext context)
        {
            // offset tracking
            int currOffset = 0;

            // process vertex buffers and index buffer
            // 1. positions
            var positions = context.Positions.ToArray();

            if (positions.Count() != 0)
            {
                LocalVertexFactory.PositionVertexBuffer    = H1VertexBuffer.ProcessVertexBuffer(positions);
                LocalVertexFactory.PositionStreamComponent = new H1VertexStreamComponent(H1VertexStreamSematicType.Position, H1VertexElementType.Float3, currOffset++);
            }

            // 2. normals
            var normals = context.Normals.ToArray();

            if (normals.Count() != 0)
            {
                LocalVertexFactory.NormalVertexBuffer    = H1VertexBuffer.ProcessVertexBuffer(normals);
                LocalVertexFactory.NormalStreamComponent = new H1VertexStreamComponent(H1VertexStreamSematicType.Normal, H1VertexElementType.Float3, currOffset++);
            }

            // 3. texcoords
            // 3-1. looping UVBuffers
            foreach (var texcoords in context.UVBuffers)
            {
                if (texcoords.Buffer.Count() != 0)
                {
                    LocalVertexFactory.TexcoordVertexBuffers.Add(H1VertexBuffer.ProcessVertexBuffer(texcoords.Buffer.ToArray()));
                    LocalVertexFactory.AddTexcoordStreamComponent(new H1VertexStreamComponent(H1VertexStreamSematicType.Texcoord, H1VertexElementType.Float2, currOffset++));
                }
            }

            // 3-2. looping UVWBuffers
            foreach (var texcoords in context.UVWBuffers)
            {
                if (texcoords.Buffer.Count() != 0)
                {
                    LocalVertexFactory.TexcoordVertexBuffers.Add(H1VertexBuffer.ProcessVertexBuffer(texcoords.Buffer.ToArray()));
                    LocalVertexFactory.AddTexcoordStreamComponent(new H1VertexStreamComponent(H1VertexStreamSematicType.Texcoord, H1VertexElementType.Float3, currOffset++));
                }
            }

            // @TODO - temporal color component
            int numVertices = context.Positions.Count;

            Vector4[] colors = new Vector4[numVertices];
            for (int i = 0; i < numVertices; ++i)
            {
                colors[i].X = 1.0f; colors[i].Y = 0.0f; colors[i].Z = 0.0f; colors[i].W = 1.0f;
            }

            LocalVertexFactory.ColorVertexBuffer    = H1VertexBuffer.ProcessVertexBuffer(colors);
            LocalVertexFactory.ColorStreamComponent = new H1VertexStreamComponent(H1VertexStreamSematicType.Color, H1VertexElementType.Float4, currOffset++);

            // generate RHIVertexFormatDeclaration
            LocalVertexFactory.GenerateVertexDeclaration();

            // 4. indices
            var indices = context.Indices.ToArray();

            m_IndexBuffer = H1IndexBuffer.ProcessIndexBuffer(indices);
        }