렌더링을 위해 VAO에서 VBO로 이동할 때 문제가 발생합니다. 안드로이드 플랫폼을 사용하고 있으며 JNI의 OpenGL API를 사용하고 있습니다. 렌더링 할 때 가 여기에이 코드 조각을 사용하여 내 코드 조각Vertex 버퍼 OutOfMemoryError 문제 Object (VBO)
// 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