如何在VAO中最佳地使用缓冲区的子部分?

时间:2016-04-10 09:36:29

标签: opengl vbo keyframe vao

我已将许多帧加载到大型VBO中(所有帧都属于同一个VAO)。 作为(简短)示例,我有:

GLfloat myBuf[] = {0.0, 0.0, 1.0, 0.0, 0.0, 0.9} // one point for each frames

然后我将我的VAO构建为:

GLuint vao =0;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
GLuint vbo = 0;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat)*3*2, myBuf, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
...

然后,为了呈现我做的子部分:

glBindVertexArray(vao);
// enable vertexes
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
// frame is 0 or 1
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, reinterpret_cast<void*>(sizeof(float)*3*frame));
// draw 1 point using offset of index array
glDrawElements(GL_POINTS, 1, GL_UNSIGNED_SHORT, 0);

以上是实现动态渲染子部分的唯一方法吗?在我初始化VAO后的原始代码中,我删除了VBO,一切都很好 - 当然这个代码我必须保留VBO。

我是对的,实现这一目标的唯一方法是使用上述方式的glVertexAttribPointer吗? 有没有更好的方法呢?

0 个答案:

没有答案