I'm trying to implement the triple buffering described here http://developer.apple.com/library/ios/#documentation/3ddrawing/conceptual/opengles_programmingguide/OpenGLESApplicationDesign/OpenGLESApplicationDesign.html. The intend is to gain higher frame rate by avoiding waiting for glBufferSubData to finish.
My understanding is that this is how to implement triple buffer:
- 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
There doesn't seem to be any performance gain between this and doing glBufferSubData then immediately call glDrawArrays.
Am I missing something or misunderstand how triple buffer should work?
Also is there a way to know when glDrawArrays stall due to glBufferSubData still not finished?