Hello, Can someone better explain this macro used in many OpenGL ES programs: Code: #define BUFFER_OFFSET(i) ((char *)NULL + (i)) I know why the macro is here, but I don't understand how it works, despite reading a couple of explanations across StackOverflow. I'd like to know how it works specifically in relation to Code: glVertexAttribPointer . The last needed parameter of Code: glVertexAttribPointer is a pointer to the first piece of vertex data. So why cast the result of the macro as a pointer to a char, when the data in the vertex array is a float? Is it due to the value of a char == 1 byte? I'm completely confused about how this works, could someone please provide some insight. Thanks!