I've been working on the renderer lately, and I'm currently playing with the idea to split the renderer up into a front and backend. The front end would be responsible for "high-level" stuff, like creating buffers from geometry data and the back-end would handle the "low-level" stuff, i.e. provide interfaces to the graphics API and perform rendering only, without any knowledge what it is renderering. The intention is to allow several highly optimized backends for various rendering paths, by using vendor-specific extensions for example. I'm gonna give it a try as soon as I finalize the way meshes are going to be stored and the interfaces between the renderer and the rest of the engine.
At the moment, I'm using the
vertex array extension to perform the
core rendering. I hope I'll be able to implement the
vertex buffer object support next week, should save me loads of
traffic up the bus as with vertex arrays, I need to send the geometry
data once per frame. As I want the engine to be as fast as possible with
static, rigid geometry, VBOs are the right way to go. They should be
also quite a bit more memory efficent as I don't have to store the
geometry in the process memory any longer.
For those who didn't see it yet: nVidia released the PerfKit for both OpenGL and DirectX. Yeah! Finally you get the power of PIX for OpenGL. Really great work from nVidia, hopefully they keep up their excellent support for OpenGL in Windows Vista (see my previous post for details)