Right. It’s about updating buffer objects efficiently.
(A buffer object just being a dumb container. You can apply any usage pattern you want to it, subject to the guidelines described. A circular buffer is one such usage pattern.)
In terms of the amount of text devoted, true. However, that’s not because replacing the buffer contents is the common case (it’s definitely not!), but instead because it’s the only part that requires special handling. “Update” doesn’t require any special steps.
In practical usage, “incremental update” is the common case. “Replacement” is the exception. And the reason is because full replacement requires synchronization or orphaning, which is more expensive, so you want to avoid that when possible.
(FWIW, I have also used the techniques described on this page to implement a circular buffer within a buffer object, multiple times in different engines, for transferring data efficiently from the CPU to the GPU, and this works very well in practice.)
Good advice. I’d second that.