* the CGL header (<OpenGL/OpenGL.h>) is pretty good documentation. It all works the same way as AGL, anyway, so the documentation for either is pretty much good for both

* When you create a texture in OpenGL, the specification mandates that OpenGL remember the texture image, regardless of how many other textures you might be using. This means that it can't assume they all fit in VRAM, so it must keep a copy of the image in main memory.

OpenGL also can't assume that the pixel buffer you pass to glTexImage2D will last beyond that point. It's fairly common, after all, to do glTexImage2D(..., buffer); free(buffer);. That means that it has to make its copy of the data when you call glTexImage2D.

GL_APPLE_client_storage gets around the necessity of making this extra copy. You guarantee that you will keep your copy of the texture image around for OpenGL to use when it needs. The extension doesn't change any other behavior -- the texture will still be copied to VRAM, for example.

There is a second Apple extension which helps out with texture uploads, and that is the glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_PRIORITY, 0);. This is a hint to the card that the texture image should be stored in AGP memory (not quite sure how this works). This makes for very fast uploads to the card, and so is very useful if you are using animated textures (a movie, for example

The 70% performance improvement refers to texture upload times only, but in my experience that's a reasonable figure.

You might also be interested in the MacGameWiki, or in the Apple-run Mac-Games-Dev and Mac-OpenGL mailing lists. They have very manageable volumes, and often contain useful information. You can subscribe at http://lists.apple.com/.