Take the 2-minute tour ×
Game Development Stack Exchange is a question and answer site for professional and independent game developers. It's 100% free, no registration required.

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?

The driver will very probably multi-buffer behind the scenes for you if it can detect a consistent usage pattern. –  Darth Melkor Jun 18 '13 at 16:48

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.