A little discussion about rendering performance - on Mac, with even moderately complex routes (and the default visual settings, draw distance, etc), but on an extremely powerful machine (quad core MacPro, i.e 2 x dual 3Ghz Xeons with 3GB ram, and a nVidia 7300GT), I regularly experience single-digit frame rates. The ECML route is bad leaving Newcastle, the West Midlands routes again are bad at larger stations, the LU routes are almost unusable. Performance is fine when scene complexity drops, and does seem to vary pretty much proportionally with scene complexity - there's not some constant overhead at work. Keep in mind the machine runs countless other OpenGL applications, including the Tao examples, very well.
I've ran both debug and release version of the .exe, and used the official pre-built .exe with the same results, so I don't believe this is a compilation problem. It may be a general problem with the Mono runtime on Mac, but from inspecting the code I do see one other obvious explanation, which I wanted to ask about: the rendering code is submitting all the main scene geometry as GL_POLYGONS, using individual glVertex commands. I've always been taught that this can lead to very poor performance, since the driver can't optimise command transfers, pipeline on the card, and so on. GL_POLYGON in particular worries me, since it will presumably fall back to a software tessellation path. (There's an additional concern that each glXXX call is a managed/native switch with some overhead, which cumulatively may also be causing problems)
I've looked into modifying the code myself to use the approaches I was taught (vertex arrays or ideally VBOs, possibly with separate index buffers although I confess I'm out of date on the usefulness of those). The problem I encounter then is the Z-ordering model; the current rendering technique splits all geometry into faces and renders by depth; I'm used to collecting all opaque geometry by material (to minimise state changes) and then rendering in arbitrary order with z-writes and z-tests enabled. Transparent geometry does need to be rendered with a depth sort - usually a post-render stage with z-test enabled but z-writes disabled.
I'm still considering modifying the rendering code, but it would be a bigger project than I had hoped, so I wondered if anyone here has any comments on what I've said, before I spend many evenings on it.
