Pumps and a Bump
Apple released MacOS 10.3.4 today, and it includes a new OpenGL feature called "vertex buffer objects" or VBO for short. It's essentially a method of storing vertex data directly on the video card to eliminate CPU overhead. Apple had implemented a similar extension in the past, called "vertex array range" (VAR) that was essentially a reworking of the Nvidia extension of a similar name. The main difference between VBO and VAR (aside from the API looking fairly different) is that VBO is a cross-platform, ARB-approved way of achieving the same speed-up.
The original Call of Duty code on the PC supported VBO but not VAR. Duane added some VAR code to it while doing the port, so the Mac version of CoD runs pretty well. He also added VBO support to test against, but it ended up performing the same as the VAR path, because according to Apple, they do basically the same thing internally.
KOTOR also supports VBO on the PC. Today I implemented the VBO path on the Mac and ran it under 10.3.4. It made a fairly noticeable improvement in performance. My Mac, a DP/800 with GeForce 3, is well below the minimum specs for KOTOR, so development has been a bit painful. Now with the VBO code turned on, it's actually playable on my Mac (although by no means fast), and performance is competitive with my PC (a 933 P3 with a GeForce 3) for the first time. Naturally, we can't require 10.3.4 for the game so I'll have to write a VAR path before it ships, but I'm grateful to Apple for adding this OpenGL extension to at least make our lives a little easier. Sometime in the future, when our games go 10.3 and up (most are 10.2 and up right now), we won't have to worry about writing VAR code and can just stick with VBO, which will make the development time that much shorter.