In a general sense, Heiroglyph was originally developed as a 'graphics first' and 'everything else second' kind of engine. The primary motivation for working on it was for building simple graphics demos and gaining some experience as I was learning about programming and 3D theory.
As the engine evolved, I attained an acceptable graphics performance and organization and started adding in other components like input, sound, and scripting. They were all interesting in their own way and served as a good learning experience. Even so, the real fun has always been graphics programming...
Getting back to the point, I recently added a new TriMesh class to the engine to support a general triangle mesh with generic vertex attributes. The primary purpose of adding the new class was to be as flexible as possible with the vertex and face data that could be added to / represented by the class.
The prior implementation statically defined a vertex position, normals, tangents, binormals, texcoords and so on. But it was an all or nothing type of model - not very flexible.
The general idea was to allow the user to add streams of per-vertex attributes as needed. So if I know that my application is only going to be using normals and tangents, then that is all I add to the TriMesh. In contrast, two months from now when I implement some new functionality that requires additional per-vertex data (something like ambient occlusion data for example) then it is a snap to add it in.
I also added some features that I had on my wish list for a while. The class can generate the normals, binormals, and tangents, as well as perform debug renders of these vectors. I also added a method for reversing vertex ordering (I use MS3D & Direct3D), and a simple interface to add faces.
Here's an image of a simple heightmap with the debug vector rendering turned on:
I am pretty happy with how the whole thing turned out, and I actually didn't run into any major problems while testing it all out. [smile]