从GLBuffer中删除顶点

时间:2012-12-12 20:20:23

标签: ios opengl-es

如果我将顶点添加到数组缓冲区中,如何删除最后添加的顶点?

// 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)++;
}

1 个答案:

答案 0 :(得分:1)

这不是OpenGL Buffer Objects的工作原理。 glMapBuffer {OES}为您提供了一个特定大小的快速内存映射,该内存是在使用glBufferData {OES}初始化缓冲区对象时定义的。您不能只写超出该对象或映射的限制并期望附加数据。您需要调整重新初始化所需的缓冲区对象的大小。

此外,OpenGL不会在“顶点”的实体中组织缓冲区对象。这只是无形的数据,你必须填写意义(对glVertexAttribPointer& Co进行适当的调用)。

由于对OpenGL {-ES}如何工作的误解,你的代码是错误的,甚至无法解决。