public static D3D11Mesh CreateTriangle() { var model = new D3D11Mesh(); var positions = new Vector3[] { new Vector3(0.0f, 0.0f, 0.0f), new Vector3(0.5f, 0.5f, 0.0f), new Vector3(0.5f, -0.5f, 0.0f), }; var positionSpan = MemoryMarshal.Cast <Vector3, byte>(positions.AsSpan()); model.SetVertexAttribute(Semantics.POSITION, positionSpan.ToArray().AsMemory(), Marshal.SizeOf(positions[0].GetType())); var colors = new Vector4[] { new Vector4(1.0f, 0.0f, 0.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f), }; var colorSpan = MemoryMarshal.Cast <Vector4, byte>(colors.AsSpan()); model.SetVertexAttribute(Semantics.COLOR, colorSpan.ToArray().AsMemory(), Marshal.SizeOf(colors[0].GetType())); Span <int> indices = stackalloc int[] { 0, 1, 2 }; var indexSpan = MemoryMarshal.Cast <int, byte>(indices); model.SetIndices(indexSpan.ToArray(), 4); return(model); } }