OpenGL ES2顶点阵列对象帮助

时间:2011-06-20 13:43:42

标签: ios opengl-es-2.0 vertex-buffer vertex-array

我无法理解如何在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来解决这个问题。

0 个答案:

没有答案