我遇到了移植到OpenGL ES 2.0的示例OpenGL代码(实际上并没有做很多事情),但是我不禁要问glBufferData函数的作用是什么。原始来源是这样的:

glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * 2 * 6, quad, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 2, (void *) 0);


但我可以成功地简化为:

glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 2, quad);


也就是说,仅使用指向glBufferData中四元数组的有效指针,就可以省略glVertexAttribPointer函数。

那么,谁能解释glBufferData函数的作用?从我所做的事情来看,这似乎是多余的,但这一定是因为我严重缺乏对API的了解。事实上,我尝试阅读khronos.org处的文档,但这无助于我理解其用法。

最佳答案

如果要在多个帧中重复使用相同的数据,则在设置/初始化过程中使用glBufferData会将数据仅一次从CPU传输到GPU。而glVertexAttribPointer必须在每个帧中调用,因此使用它传输数据会导致使用更多的总线带宽。

如果要在每一帧更新属性数组,则一种方法或另一种方法没有太多优势。

10-08 18:36