You can also use attrib arrays if you have GL_ARB_vertex_program available (this extension also defines a clear mapping between generic attribs and fixed attribs too). See
http://oss.sgi.com/projects/ogl-sample/ ... rogram.txt (but be prepared to nose-dive into ASM shaders while searching for the relevane info).
For symbols see:
http://support.microsoft.com/kb/319037What's wrong with glClientActiveTexture is that it's a rotten API. It works, it does what it says, but it's lousy design. glMultiTexCoordPointer would have been better (and would have mapped more cleanly to the equivalent immediate mode calls too).
Lock/Unlock is only really useful if there is a portion of the arrays that you're going to reuse for subsequent draw calls. Say you're drawing an MD2 will a shell around it - the positions will be common but one pass will add texcoords and light colours, the second pass will add shell colour. So you set your array for positions, Lock, then set for texcoords and light colours, draw, set for shell colours, draw again, finally Unlock, and if the driver does it's job right the positions will only need to be sent to the GPU and (maybe even) transformed once (not even VBOs can do that). It may be useful as well if you can call it early enough then do a bunch of other work before your draw call as the driver may be able to stream your verts to the GPU at the same time as you're doing the other work - in that way it can act as a hint to the driver that "I'm not going to be modifying this data from here on, so you can go do your thing with it while I'm doing this other work". In practice it may sometimes be difficult to find other work to be doing.