Opengl es 为什么没有glBindBuffer的GLVertexAttribute指针也可以工作?

Opengl es 为什么没有glBindBuffer的GLVertexAttribute指针也可以工作?,opengl-es,Opengl Es,在几个OpenGL ES示例中,我看到了以下代码 GL_FLOAT vVertices[] = { 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f }; glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), vVertices); glEnableVertexAttribArray(0); glDrawArraysInstanced(GL_TRIANGLES, 0, 3, 1); 画三角形

在几个OpenGL ES示例中,我看到了以下代码

GL_FLOAT vVertices[] = { 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f };
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), vVertices);
glEnableVertexAttribArray(0);
glDrawArraysInstanced(GL_TRIANGLES, 0, 3, 1);
画三角形。(可以使用简单的着色器轻松填充,唯一的顶点属性假定为2D坐标的vec2。)

从这段教程代码中,我倾向于相信
glvertexattributepointer
的最后一个参数应该是指向顶点数据所在位置的指针。然而,文档似乎建议它应该是一个整数,但故意将其强制转换为
常量void*

但是为什么上面的代码可以工作呢?OpenGL如何知道何时将参数解释为指针,何时解释为整数

但是为什么上面的代码可以工作呢

因为OpenGL ES仍然支持桌面OpenGL在3.2中删除它之前的功能。wiki描述了核心桌面OpenGL的功能

应该注意的是,ES不鼓励对顶点数据使用客户端内存。但由于向后兼容,他们必须继续“支持”它

OpenGL如何知道何时将参数解释为指针,何时解释为整数

如果缓冲区对象绑定到
GL\u ARRAY\u buffer
,则指针参数被解释为整数。如果没有缓冲区绑定到该绑定点,则指针参数必须是实际的内存指针