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); }