Как реализовать тройной буфер
Я пытаюсь реализовать тройную буферизацию, описанную здесь 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.
Я что-то упускаю или неправильно понимаю, как должен работать тройной буфер?
Также есть ли способ узнать, когда glDrawArrays останавливается из-за glBufferSubData еще не завершена?