Fast rendering of tiles with colors?

How can you render an area with colored tiles, (10-20x10-20), faster than with regular quads/triangles with a call to glColor3ub with each. I’ve tried with triangle strips, but then you can’t make each tile an individual color, because the vertices are shared :frowning:
Can you do it while keeping on a simple level like strips or should I begin learning VBO or vertex arrays?
I just don’t want to learn VBO, right now, if it doesn’t affect the rendering speed which don’t think it would with only 100-400 polys on the screen for the tiles plus a couple of hundreds extra.

Use vertex arrays and render indexed triangles. You should end up with four vertices per tile.

A---C  E---G
|  /|  |  /|
| / |  | / |
|/  |  |/  |
B---D  F---H

ABCD need to have the same per-vertex color – the color of the first tile, obviously --, and EFGH get the color of the second tile.

You could render these two tiles like this:

glColorPointer(<...> );
glVertexPointer(<...> );
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);

static const GLushort indices[]={0,1,2, 2,1,3, 4,5,6, 6,5,7};
glDrawElements(GL_TRIANGLES,12,GL_UNSIGNED_SHORT,indices);

If I understood it right, you only need solid colors.
For a regular 2D grid, the simplest method is to use one GL_QUAD_STRIP per row.
For the color, use flat shading with glShadeModel(GL_FLAT) and only the color at each last quad-vertex will be used to color the whole quad, that means each quad in a quadstrip has a single color and it’s not shared like with Gouraud shading.
With indexed primitives like the glDrawElements you can reuse the vertices of the previous row for better performance.