我正在尝试实现此处描述的三重缓冲http://developer.apple.com/library/ios/#documentation/3ddrawing/conceptual/opengles_programmingguide/OpenGLESApplicationDesign/OpenGLESApplicationDesign.html。目的是通过避免等待 glBufferSubData 完成来获得更高的帧速率。
我的理解是,这是如何实现三重缓冲区:
- make 3 buffers with glGenBuffers()
Current frame:
- bind to buffer3
- draw last frame
- bind to buffer1
- glBufferSubData for all the vertices,
keep track of their texture/vertex count,blend function, etc
Next frame:
- bind to buffer 1
- draw last frame (bind texture, blend func, glDrawArrays)
- and so on
这与执行 glBufferSubData 然后立即调用 glDrawArrays 之间似乎没有任何性能提升。
我是否遗漏了什么或误解了三重缓冲应该如何工作?
还有一种方法可以知道由于 glBufferSubData 仍未完成而导致 glDrawArrays 停止的时间吗?