0

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

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

1 回答 1

1

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

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

由于对 OpenGL{-ES} 工作原理的误解,您的代码非常错误,甚至无法修复。

于 2012-12-12T20:27:50.330 回答