我遇到了移植到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
必须在每个帧中调用,因此使用它传输数据会导致使用更多的总线带宽。
如果要在每一帧更新属性数组,则一种方法或另一种方法没有太多优势。