【发布时间】:2011-06-13 11:25:00
【问题描述】:
OpenGL/OpenGLES VBO 是否只保存相同大小的顶点?
我问是因为我发现 glDrawElements 的参数只有索引缓冲区的偏移值(它的最后一个参数),这意味着: 1. 如果缓冲区已经部分填满,我必须在将它们提交给 IBO 之前手动抵消我的指数。无论如何,手动偏移索引很容易,所以这里不是问题。 2.用作顶点缓冲区的VBO必须拥有相同大小的顶点,否则索引无意义。
这种行为与DirectX Vertex Buffer不同,在directx中,有一个SetStreamSource,可以用来偏移Verterx Buffer,还有DrawIndexedPrimitive,你的VB可以保存任意大小的顶点。
也许 OpenGLES 1.1 版本的 SetStreamSource 不可用?也许 OpenGLES 2.0 会支持它?
我的目标平台是 iPhone OpenGLES 1.1,所以如果 GL 版本 SetStreamSource 不可用,我将放弃使用 VBO,因为: 1.它带来了更多的麻烦(我将不得不分配许多持有不同大小顶点的VBO) 2. 无论如何都没有性能提升(OpenGLES 1.1 没有硬件支持)
感谢您的阅读,非常感谢您分享有关在 OpenGLES 1.1 中正确使用 VBO 的经验。谢谢。
【问题讨论】:
-
“相同大小的顶点”你是怎么理解的?