我无法理解如何在OpenGL ES2中使用VAO(在iOS上)并让它们运行起来。 我当前的渲染设置如下(伪代码):
初始化:
foreach VBO:
glGenBuffers();
渲染帧:
// Render VBO 1
glClear(color | depth);
glBindBuffer(GL_ARRAY_BUFFER, arrayVBO1);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexVBO1);
foreach vertex attribute:
glVertexAttribPointer();
glEnableVertexAttribArray();
glBufferData(GL_ARRAY_BUFFER, ...);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, ...);
glDrawElements(GL_TRIANGLE_STRIP, ...);
// Render VBO 2
glClear(color | depth);
glBindBuffer(GL_ARRAY_BUFFER, arrayVBO2);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexVBO2);
foreach vertex attribute:
glVertexAttribPointer();
glEnableVertexAttribArray();
glBufferData(GL_ARRAY_BUFFER, ...);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, ...);
glDrawElements(GL_TRIANGLE_STRIP, ...);
这很好用,但是,两个VBO都具有完全相同的交错顶点属性结构,正如您所看到的那样,我为每个VBO设置并为每个帧启用每个属性。 Instruments抱怨对glVertexAttribPointer()和glEnableVertexAttribArray()的冗余调用,但是当我将其中一个或两个调用到初始化阶段时,我在调用glDrawElements时得到一个EXC_BAD_ACCESS,或者没有绘制任何内容。
我的问题是我是否需要每一帧都这样做,如果不这样做,为什么它不起作用,以及我如何使用VAO来解决这个问题。