Quote Originally Posted by Exempt View Post
If I wanted to create a real index like 0, 1, 2, 3, 2, 1 to reuse vertice correctly I'd also have to remove the duplicated vertex from my data right?
There would be no point in duplicating the vertices, but if they were present you could construct an index array which either ignored them or used them. The example code I posted assumes that the vertices are "packed", i.e. the vertex comprising elements 3*n,3*n+1,3*n+2 is for row (n/cols) and column (n%cols).

Quote Originally Posted by Exempt View Post
I think I may go ahead and bump up to opengl 3.3 soon so I can use the primitive restart method but that's for triangle strips and I'm not sure why I need a index for triangle strips since really I just need the first 2 point and then just one point to continue the strip after that...
If you try to render a grid using strips, you'll find that the end of each row doesn't work out; one of the last two vertices will be on the "far" side of the strip. Triangle strips/fans used to have a performance benefit on older hardware, but nowadays there isn't really any advantage beyond reducing the size of the index arrays.

The main problem with using glDrawArrays() for typical meshes is that you have to duplicate most of the interior vertices, which wastes memory and complicates matters if you need to modify vertices dynamically. It's more useful for points and line strips/loops.

Note that, for strips, you can get by without primitive restart by just repeating the first vertex of a new section, effectively linking the sections with degenerate triangles (their area will be zero, so nothing will be drawn). That won't work with fans, though (or with glPolygonMode(GL_LINE) if the sections are disjoint).