0

我正在尝试更改 VBO 的内容,但它是用于流绘制,所以我试图理解并遵循此处(和此处)解释的概念,但是当我尝试这样做时出现错误。

这就是我想要做的:

void Model::Draw()
{
    //Changing only the vertexesVBO
    _vertexes[0] += 0.0001f;
    glBindBuffer(GL_ARRAY_BUFFER, _vboVertexes._bufferID);

    //This works
    //glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(float), &_vertexes[0]);

    //But this doesn't
    glBufferData(GL_ARRAY_BUFFER, 0, NULL, GL_STREAM_DRAW);
    glBufferSubData(GL_ARRAY_BUFFER, 0, _vertexCount * sizeof(float), _vertexes);

    //Call vertexVBO, uvVBO, indexIBO, disable them
}

假设,我正在创建一个大小为 _vertexCount * sizeof(float) 的新 BufferData 和未初始化的数据,并将相同的_vertexes数据上传到它以用于下一次绘图调用。但这会引发访问冲突读取的错误。

我如何让这个工作?如果我理解正确,那么我不需要为动画实现双缓冲 VBO,对吧?

4

1 回答 1

1

假设,我正在创建一个大小为 _vertexCount * sizeof(float) 的新 BufferData 和未初始化的数据,并将相同的 _vertexes 数据上传到它以用于下一次绘图调用。

不,您只需创建一个大小为 0的新缓冲存储。Anf theupdate withglBufferSubData()将失败,因为它访问缓冲区越界。

于 2013-09-20T21:17:55.427 回答