   glInterleaved Arrays vs. gl*Pointer
  I find myself fairly confused with the entire family of gl*Pointer functions.  My application is using an interleaved VBO to render meshes.  My vertex class has the following layout:class CVertex{public:inline CVertex(){}    inline CVertex(float x1, float y1, float z1) { x = x1; y = y1; z = z1;} float u;float v;float nx;float ny; float nz;GLfloat x;GLfloat y; GLfloat z;};My VBO is rendered perfectly when I use glInterleavedArrays(GL_T2F_N3F_V3F, 0, 0).  When, however, I attempt to use the gl*Pointer set of functions, things go a little sideways.I'm probably just misunderstanding the way these functions work, and in particular, the stride argument.  The docs define this as the number of bytes between consecutive elements.  Given that, I'd think the code should be:glTexCoordPointer(2, GL_FLOAT, 24, 0);glNormalPointer(GL_FLOAT, 20, 0);glVertexPointer(3, GL_FLOAT, 20, 0);But the above just gives me a mess when rendered.  When it's all said and done, I have something that works now, but not understanding what's going on here is frustrating.  Am I just up too late and missing something obvious?   
  Your first texture coordinate, your first vertex, and your first normal are all at byte 0 of your VBO? That seems unlikely.   ;  I was under the impression that argument was if you'd packed an array with consecutive types, instead of interleaving.  But I'm sure you're right, it doesn't even make sense that OpenGL would know the positioning of the types within the structure without telling it starting positions.   ;  As to the stride, the stride is the distance from one value to the next -- that is, the difference between the address of the second normal and the address of the first normal, rather than the amount of non-normal stuff between them. For interleaved components, the stride will be the same for all components.   