我有一个顶点属性数组GLfloat *vxData
。我已经将GL_ARRAY_BUFFER
和GL_ELEMENT_ARRAY_BUFFER
与vxData
以及正确的索引数据绑定,并且初始顶点成功呈现。OpenGL ES 2.0:使用具有新顶点数据大小的glBufferData
在每个渲染步骤我做的:
glBindBuffer(GL_ARRAY_BUFFER, buffers[0]);
glBufferData(GL_ARRAY_BUFFER, vxDataSize, vxData, GL_STATIC_DRAW);
glDrawElements(...)
在某些阶段,vxData
改变大小以容纳更少/更多个顶点,索引数据被重建,以反映这一点,和vxDataSize
被更新。对于在数据更改后立即进行的渲染,仅仅调用上面的相同行是否正确?
我知道其他可能性,例如使用glMapBufferOES
,我只想知道上述情况在技术上是否正确。
非常感谢这种见解,Nicol。为了实现你的第二个建议,大概我修改'vxDataSize'是一个上限,并简单地为存在的顶点提供索引数据?考虑到'vxData'存储在RAM中并且需要尽可能小,我应该如何处理? – KomodoDave
澄清:我将'vxData'存储在GPU之外,并在每个渲染器上重新提交,因为它包含一些昂贵的值来计算。在RAM中存储可让我使用delta来调整某些值,而无需从头开始重新计算。 – KomodoDave
您是否认为使vxDataSize动态化,使其更大一帧,更小,即使在RAM中也能节省内存?你正在分割你的地址空间。如果您将其设置为固定大小,那么您只会获得一块永远不会移动或调整大小的内存块。如果它的大小可变,那么当你把它放大或缩小时,你必须重新分配它。这可以将它移动到您的地址空间并对其进行分段。不是很好。 –