Ari*_*nen 17 iphone graphics opengl-es vbo
我有许多粒子,每个帧都会改变顶点.当前正在使用"客户端"内存中的顶点数组绘制顶点.如果我使用顶点缓冲区对象,我可以期待什么性能特征?
因为我必须使用一些glBuffersubData来更新粒子顶点,所以我无论如何都要将每个帧的顶点转移到视频内存(就像我使用常规顶点数组一样)?在这种情况下,VBO有什么好处吗?
这适用于iOS设备.实际的绘制调用:glDrawElements(GL_POINTS,num_particles,GL_UNSIGNED_SHORT,pindices);
我应该使用GL_STREAM_DRAW
或GL_DYNAMIC_DRAW
?
Apple的文档似乎建议在任何情况下都使用VBO。如果您使用的是ES 2.x,则GL_STREAM_DRAW顶点缓冲区类型明确适用于“当您的应用程序需要创建呈现少量次数然后被丢弃的瞬态几何图形时。这在您的应用程序必须动态更改顶点时非常有用。以无法在顶点着色器中执行的方式在每个帧中记录数据。” 然后直接提倡使用glBufferSubData。
从逻辑上讲,我认为完全重新提供数据并将其发送到现有的GL_STREAM_DRAW或GL_DYNAMIC_DRAW缓冲区之间的唯一区别是,内存映射中的空间(GPU或CPU,取决于芯片— MBX并不是真正的VBO,而是Apple出于其他性能原因支持它们)可以分配一次,而不是在每个帧中分配和释放。
与切换到VBO相比,使用该文档中给出的对齐和打包技巧可能会带来更好的改进,因为否则,CPU只需在glDrawElements上解压缩和重新打包数据即可。尽管您很可能已经意识到了这一点,并且我很欣赏它不是问题的直接部分-我主要将其作为对性能优势的比较猜测。
归档时间: |
|
查看次数: |
4781 次 |
最近记录: |