從VAO移動到VBO進行渲染時,我遇到了問題。我正在使用Android平臺並使用來自JNI的OpenGL API。 這裏是我的代碼片段頂點緩衝區對象(VBO)中的OutOfMemoryError問題
// 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);
通過使用此代碼段,我渲染時得到的OutOfMemoryError。我無法弄清楚可能會導致此錯誤的原因。如果有人注意到從這段代碼中使用VBO不合適,請幫助我。
由於
無需每次重新創建緩衝區。重新使用它們。 – Trax
是的,這就是爲什麼我只是把它放在初始化(見我說我把它放在構造函數中的註釋行)。你看到其他錯誤嗎? – deduu