在OpenGL中,为什么glVertexAttribPointer要求将"指针"参数作为void*传入?

Nat*_*ley 5 opengl

规范glVertexAttribPointer如下:

void glVertexAttribPointer( GLuint index,
    GLint size,
    GLenum type,
    GLboolean normalized,
    GLsizei stride,
    const GLvoid * pointer);
Run Code Online (Sandbox Code Playgroud)

鉴于最后一个参数只是一个4字节的整数偏移量,为什么OpenGL期望它作为void指针传入?

Kos*_*Kos 10

遗产.

这个参数在VBO之前有不同的含义:你将顶点数据保存在客户端内存中并传递数组的地址(参见glEnableClientState等).

现在最后一个参数可以有2个含义(缓冲区对象的偏移量,客户端状态数组的地址).Khronos没有gl*Pointer为缓冲区对象的函数提供单独的版本,所以你需要做这个笨拙的演员.