Following up on my recent question on ComputerGraphics.SE — how is flat shading of non-planar polygons implemented in Blender?
If polygons are rendered using GL_TRIANGLE_FAN in OpenGL, one approach would be to upload a single normal vector for every individual polygon that's rendered. This might not be very efficient though.
On the other hand, if polygons are split into triangles before everything is rendered, then these triangles somehow have to share a normal vector. This sounds more like glDrawArrays() than glDrawElements(), which again might not be the best solution.