private static Buffer CreateVertexBuffer() { // ReSharper disable once RedundantCast var vertices = (Span <Vertex>) stackalloc Vertex[3]; // describe the vertices of the triangle vertices[0].Position = new Vector3(0.0f, 0.5f, 0.5f); vertices[0].Color = Rgba32F.Red; vertices[1].Position = new Vector3(0.5f, -0.5f, 0.5f); vertices[1].Color = Rgba32F.Green; vertices[2].Position = new Vector3(-0.5f, -0.5f, 0.5f); vertices[2].Color = Rgba32F.Blue; // describe an immutable vertex buffer var bufferDesc = new BufferDescriptor { Usage = ResourceUsage.Immutable, Type = BufferType.VertexBuffer }; // immutable buffers need to specify the data/size in the descriptor // when using a `Memory<T>`, or a `Span<T>` which is unmanaged or already pinned, we do this by calling `SetData` bufferDesc.SetData(vertices); // create the vertex buffer resource from the descriptor // note: for immutable buffers, this "uploads" the data to the GPU return(GraphicsDevice.CreateBuffer(ref bufferDesc)); }
private static Buffer CreateIndexBuffer() { // ReSharper disable once RedundantCast var indices = (Span <ushort>) stackalloc ushort[] { 0, 1, 2, // triangle 0, 1, 2, // triangle 1 of quad 0, 2, 3 // triangle 2 of quad }; // describe an immutable index buffer var bufferDesc = new BufferDescriptor { Usage = ResourceUsage.Immutable, Type = BufferType.IndexBuffer }; // immutable buffers need to specify the data/size in the descriptor // when using a `Memory<T>`, or a `Span<T>` which is unmanaged or already pinned, we do this by calling `SetData` bufferDesc.SetData(indices); // create the index buffer resource using the descriptor // note: for immutable buffers, this "uploads" the data to the GPU return(GraphicsDevice.CreateBuffer(ref bufferDesc)); }