OpenGL ES 2.0:将glBufferData与新的顶点数据大小一起使用

时间:2011-09-04 19:58:15

标签: opengl-es opengl-es-2.0 vertex

我有一个顶点属性数组GLfloat *vxData。我已将GL_ARRAY_BUFFERGL_ELEMENT_ARRAY_BUFFERvxData和正确的索引数据绑定,并且初始顶点成功渲染。

在每个渲染步骤中,我都会这样做:

glBindBuffer(GL_ARRAY_BUFFER, buffers[0]);
glBufferData(GL_ARRAY_BUFFER, vxDataSize, vxData, GL_STATIC_DRAW);
glDrawElements(...)

在某个阶段,vxData会更改大小以容纳更少/更多的顶点,重新创建索引数据以反映此情况,并更新vxDataSize。对于数据更改后的渲染,单击上面的相同行是否正确?

我知道其他可能性,例如使用glMapBufferOES,我只想知道上述情况在技术上是否正确。

1 个答案:

答案 0 :(得分:5)

这是对的吗?是的,您可以这样做,您应该获得能够呈现您期望的功能代码。是吗?

没有

首先,你是在谈论OpenGL实现。你告诉它你正在制作STATIC数据。 STATIC表示您上传一次。如果你每帧都这样做,那么你应该使用STREAM而不是STATIC。

其次,你不应该让缓冲区变得越来越小。刷新旧数据是一回事,但如果你告诉OpenGL缓冲区需要更大,那么它必须实际分配内存。这不好。选择一个尺寸并坚持下去。选择您可以使用的最大尺寸并留在那里。