private void init(DisposableI parent, BufferLayoutDescI bufferLayoutDesc, BufferUsages bufferUsage, VertexBufferTopologys vertexBufferTopology, float[] vertices, int[] indices) { try { video = parent.FindParentOrSelfWithException <Video>(); Topology = vertexBufferTopology; var format = new G.VertexFormat[bufferLayoutDesc.Elements.Count]; for (int i = 0; i != bufferLayoutDesc.Elements.Count; ++i) { switch (bufferLayoutDesc.Elements[i].FloatCount) { case 1: format[i] = G.VertexFormat.Float; break; case 2: format[i] = G.VertexFormat.Float2; break; case 3: format[i] = G.VertexFormat.Float3; break; case 4: format[i] = G.VertexFormat.Float4; break; } } if (indices != null && indices.Length != 0) { vertexBuffer = new G.VertexBuffer(vertexCount, indices.Length, format); indexCount = indices.Length; var indicesShort = new ushort[indexCount]; for (int i = 0; i != indexCount; ++i) { indicesShort[i] = (ushort)indices[i]; } vertexBuffer.SetIndices(indicesShort); } else { vertexBuffer = new G.VertexBuffer(vertexCount, format); } vertexBuffer.SetVertices(vertices); } catch (Exception e) { Dispose(); throw e; } }