如果我将顶点添加到数组缓冲区中,如何删除最后添加的顶点?
// Append vertex to array buffer
static inline void addVertex(NSUInteger *length, NISignaturePoint v) {
if ((*length) >= maxLength) {
return;
}
GLvoid *data = glMapBufferOES(GL_ARRAY_BUFFER, GL_WRITE_ONLY_OES);
memcpy(data + sizeof(NISignaturePoint) * (*length), &v, sizeof(NISignaturePoint));
glUnmapBufferOES(GL_ARRAY_BUFFER);
(*length)++;
}
答案 0 :(得分:1)
这不是OpenGL Buffer Objects的工作原理。 glMapBuffer {OES}为您提供了一个特定大小的快速内存映射,该内存是在使用glBufferData {OES}初始化缓冲区对象时定义的。您不能只写超出该对象或映射的限制并期望附加数据。您需要调整重新初始化所需的缓冲区对象的大小。
此外,OpenGL不会在“顶点”的实体中组织缓冲区对象。这只是无形的数据,你必须填写意义(对glVertexAttribPointer& Co进行适当的调用)。
由于对OpenGL {-ES}如何工作的误解,你的代码是错误的,甚至无法解决。