对于 OpenGL 中的某些函数,必须为步长指定一个字节偏移量,例如在 glVertexAttribPointer()
中。起初我会猜测它会是一个像整数一样的普通数值。但经过检查,我意识到它需要转换为 void*
(更具体地说是 GLvoid*
)。我的问题是:void*
的预期含义是什么,为什么必须将它用于字节偏移量?
最佳答案
glVertexAttribPointer() 是 Vertex Buffer Objects 之前的一个旧函数。
在 VBO 之前,您的顶点数据将存储在客户端数组中,您需要在绘制之前将指向数据的指针传递给 OpenGL。
当 VBO 出现时,他们通过允许使用指针传递整数偏移量来重新调整此函数的用途。
例如
void* offset = (void*)offsetof(vertexStructName, vertexMemberName);
关于c++ - 某些 GL 函数的好奇 "void*"参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25074075/