我正在尝试更改 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,对吧?