我正在尝试更改 VBO 的内容,但它是用于流绘制,因此我试图理解并遵循here(和here)解释的概念,但是当我尝试一下。
这就是我正在尝试做的:
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,对吧?
据说,我正在创建一个大小为 _vertexCount * sizeof(float) 的新 BufferData 和未初始化的数据,并将相同的 _vertexes 数据上传到其中以在下一次绘制调用中使用。
不。您只需创建一个大小为 0 的新缓冲区存储。并且使用
glBufferSubData()
进行的更新将会失败,因为它访问的缓冲区越界。