2012-12-12 27 views
0

如果我將頂點添加到數組緩衝區,如何刪除最後添加的頂點?從GLBuffer移除頂點

// 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

這不是OpenGL緩衝區對象的工作方式。 glMapBuffer {OES}爲您提供了一個特定大小的快速內存映射,該映射在使用glBufferData {OES}初始化緩衝區對象時已經定義。你不能只寫超出該對象或映射的限制,並期望數據被追加。您需要調整緩衝區對象的大小以重新初始化它。

另外的OpenGL不「頂點」的實體組織緩衝對象。這只是無形的數據,您必須填寫意義(正在調用glVertexAttribpointer & Co.)。

你的代碼是錯的,由於OpenGL的{} -ES是如何工作的誤解,認爲它甚至不能固定。