I am rendering models read from files with flat shading using Vertex Buffer Objects (VBO). Now, most mesh file formats consist of a list of vertices, followed by a list of faces, where each face consists simply of small set of vertex indices (3 indices per face for a triangle mesh). This is in many ways convenient for most tasks, as the vertices can be parsed and things like normals and tex-coords can be computed, and the face-indices can be parsed in a similar fashion. All this can then be uploaded to a VBO and rendered without any problems.
Now, in my application I want to use flat shading. By that I mean that shading is computed on a per face (i.e. triangle) basis. My understanding is that when using VBO’s one must supply normal and tex-coord information on a per vertex basis, so in my case I need to duplicate vertices that are used in two or more faces, is this correct? What this means is that I will always end up having 3num_tris number of vertices in my vertex buffer, and 3num_tris indices in my index buffer.
I am wondering if there is any work-around to this problem. My geometry data is static, so I could just go for a display list and let the driver optimize it, but since I like to think that the future should be embraced I would prefer working with buffers of some sort. As an additional note I am using a vertex and a fragment shader in my rendering, so setting glShadeModel(GL_FLAT) probably won’t work, or would it?