Opengl es 为什么没有glBindBuffer的GLVertexAttribute指针也可以工作?
在几个OpenGL ES示例中,我看到了以下代码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); 画三角形
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
,则指针参数被解释为整数。如果没有缓冲区绑定到该绑定点,则指针参数必须是实际的内存指针