【发布时间】:2013-05-17 06:10:51
【问题描述】:
从 VAO 转移到 VBO 进行渲染时,我在这里遇到了问题。我正在使用 Android 平台并使用 JNI 的 OpenGL API。 这是我的 sn-p 代码
// Initialize in constructor
GLuint buffer[3];
glGenBuffers(3, buffer);
// In onDrawFrame(), I create draw function.
// My object data will be dynamically updated during runtime so I used GL_DYNAMIC_DRAW.
glBindBuffer(GL_ARRAY_BUFFER, buffer[0]);
glBufferData(GL_ARRAY_BUFFER, genData.cubeNumVerts * 4, genData.vertex, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, buffer[1]);
glBufferData(GL_ARRAY_BUFFER, genData.cubeColorVerts *4, genData.colors, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, buffer[2]);
glBufferData(GL_ARRAY_BUFFER, genData.cubeNormalVerts * 4, genData.normals, GL_DYNAMIC_DRAW);
if(genData.vertex == 0 || genData.normals == 0 || genData.colors == 0) LOG("Error: failed to allocate a memory");
glBindBuffer(GL_ARRAY_BUFFER, buffer[0]);
glEnableVertexAttribArray(vertexHandle);
glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0,0);
glBindBuffer(GL_ARRAY_BUFFER, buffer[2]);
glEnableVertexAttribArray(normalHandle);
glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0,0);
glBindBuffer(GL_ARRAY_BUFFER, buffer[1]);
glEnableVertexAttribArray(mColorHandle);
glVertexAttribPointer(mColorHandle, 4, GL_FLOAT, GL_FALSE, 0,0);
glDrawArrays(GL_TRIANGLES, 0, genData.cubeNumVerts);
glDeleteBuffers(3, buffer);
通过使用这个 sn-p 代码,我在渲染时遇到了 OutofMemoryError。我无法弄清楚可能导致此错误的原因。如果有人注意到从这个 sn-p 代码中使用 VBO 的不当之处,请帮助我。
谢谢
【问题讨论】:
-
无需每次都重新创建缓冲区。重复使用它们。
-
是的,这就是为什么我把它放在初始化时(参见我说我把它放在构造函数中的注释行)。你看到其他错误了吗?
标签: android opengl-es-2.0 vbo