我找不到太多关于opengl es 2.0是否支持从多个顶点缓冲区绘制的信息(即,使用一个顶点缓冲区用于位置数据,另一个用于法线、颜色等)。此页面 http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesforWorkingwithVertexData/TechniquesforWorkingwithVertexData.html特别是清单 9.4 意味着您应该能够,但我无法做到在我的程序上工作。违规draw call的代码:
glBindBuffer(GL_ARRAY_BUFFER, mPositionBuffer->openglID);
glVertexAttribPointer(0, 4, GL_FLOAT, 0, 16, NULL);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, mTexCoordBuffer->openglID);
glVertexAttribPointer(1, 2, GL_FLOAT, 0, 76, NULL);
glEnableVertexAttribArray(1);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer->openglID);
glDrawElements(GL_TRIANGLES, 10788, GL_UNSIGNED_SHORT, NULL);
此绘图调用将在模拟器上因 EXC_BAD_ACCESS 而停止或崩溃,并在设备上产生非常奇怪的行为(opengl 绘制随机三角形或呈现先前渲染的帧)。没有任何 opengl 调用会返回错误,我已经广泛检查了顶点缓冲区,并且确信它们具有正确的大小和数据。
有没有人使用多个顶点缓冲区成功渲染,并且可以分享他们为什么这可能不起作用的经验?任何有关从何处开始调试不返回任何错误代码的停滞/失败的绘图调用的信息将不胜感激。