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 に答える