I have just recently started working with Monogame (XNA). Now I had code that was drawing a grid using DrawUserIndexedPrimitives. However I read that it reloads the vertices in the GPU each draw, and I don't think that is going to cut it for me. Therefore I wanted to use DrawIndexedPrimitives instead.
However, when I made the switch, my pretty grid suddenly dissapeared. The question is thus: What did I do wrong using DrawIndexedPrimitives? The code within the draw method is given below:
game.GraphicsDevice.Indices = terrainIndexBuffer; game.GraphicsDevice.SetVertexBuffer(terrainVertexBuffer); game.GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, terrainVertices.Length, 0, triangleIndicesList.Length / 3); // This worked VV // game.GraphicsDevice.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, // terrainVertices, // 0, // terrainVertices.Length, // triangleIndicesList, // 0, // triangleIndicesList.Length / 3);
terrainVertices is the list of vertices for the triangles,
triangleIndicesList is a list representing the triangles (each three entries here refer to the vertices of one triangle).
Outside of the Draw method, I initialized the grid and index list as follows:
terrainVertexBuffer = new VertexBuffer(game.GraphicsDevice, typeof(VertexPosition), terrainVertices.Length, BufferUsage.None); terrainIndexBuffer = new IndexBuffer(game.GraphicsDevice, IndexElementSize.SixteenBits, sizeof(short) * triangleIndicesList.Length, BufferUsage.None); terrainVertexBuffer.SetData<VertexPosition>(terrainVertices);