L' objet Framebuffer n'est pas en fait un tampon, mais un objet agrégateur qui contient une ou plusieurs pièces jointes, qui, à leur tour, sont les tampons réels. Vous pouvez comprendre le Framebuffer comme une structure C où chaque membre est un pointeur vers un tampon. Sans aucune pièce jointe, un objet Framebuffer a une très faible empreinte.
Désormais, chaque buffer attaché à un Framebuffer peut être un Renderbuffer ou une texture .
Le Renderbuffer est un tampon réel (un tableau d'octets, d'entiers ou de pixels). Le Renderbuffer stocke les valeurs de pixels au format natif, il est donc optimisé pour le rendu hors écran. En d'autres termes, dessiner sur un tampon de rendu peut être beaucoup plus rapide que dessiner sur une texture. L'inconvénient est que les pixels utilisent un format natif dépendant de l'implémentation, de sorte que la lecture à partir d'un Renderbuffer est beaucoup plus difficile que la lecture à partir d'une texture. Néanmoins, une fois qu'un Renderbuffer a été peint, on peut copier son contenu directement à l'écran (ou vers un autre Renderbuffer , je suppose), très rapidement en utilisant des opérations de transfert de pixels. Cela signifie qu'un Renderbuffer peut être utilisé pour implémenter efficacement le modèle de double tampon que vous avez mentionné.
Les tampons de rendu sont un concept relativement nouveau. Avant eux, un Framebuffer était utilisé pour rendre une texture , ce qui peut être plus lent car une texture utilise un format standard. Il est toujours possible de rendre une texture, et c'est assez utile quand on a besoin d'effectuer plusieurs passes sur chaque pixel pour construire une scène, ou pour dessiner une scène sur une surface d'une autre scène!
Le wiki OpenGL a cette page qui montre plus de détails et de liens.