web-dev-qa-db-fra.com

Quel est le concept et les différences entre Framebuffer et Renderbuffer dans OpenGL?

Je suis confus au sujet du concept de Framebuffer et Renderbuffer. Je sais qu'ils sont nécessaires pour le rendu, mais je veux les comprendre avant utilisation.

Je sais qu'un tampon bitmap est requis pour stocker le résultat du dessin temporaire. Le tampon arrière. Et l'autre tampon doit être visible à l'écran lorsque ces dessins sont en cours. Le tampon avant. Et retournez-les et dessinez à nouveau. Je connais ce concept, mais il est difficile de connecter ces objets à ce concept.

Quel est leur concept et leurs différences?

122
Eonil

Cette page a quelques détails qui, je pense, expliquent très bien la différence. D'abord:

La destination de rendu finale du pipeline OpenGL est appelée [the] framebuffer.

Tandis que:

Objet Renderbuffer
De plus, l'objet renderbuffer est nouvellement introduit pour le rendu hors écran. Il permet de rendre une scène directement sur un objet de rendu tampon, au lieu de le rendre sur un objet de texture. Renderbuffer est simplement un objet de stockage de données contenant une seule image d'un format interne pouvant être rendu. Il est utilisé pour stocker des tampons logiques OpenGL qui n'ont pas de format de texture correspondant, comme un gabarit ou un tampon de profondeur.

58
ChrisF

Le Framebuffer l'objet 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 Framebuffer comme structure C où chaque membre est un pointeur vers un tampon. Sans aucun attachement, un Framebuffer l'objet a une empreinte très faible.

Maintenant, chaque tampon attaché à un Framebuffer peut être un Renderbuffer ou un texture.

Le Renderbuffer est un tampon réel (un tableau d'octets, d'entiers ou de pixels). le Renderbuffer stocke les valeurs des pixels au format natif, il est donc optimisé pour le rendu hors écran. En d'autres termes, tirer à un Renderbuffer peut être beaucoup plus rapide que de 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 Renderbuffer est beaucoup plus difficile que de lire une texture. Néanmoins, une fois Renderbuffer a été peint, on peut copier son contenu directement sur l'écran (ou sur d'autres 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é.

Renderbuffers sont un concept relativement nouveau. Devant eux, un Framebuffer a été utilisé pour rendre à un 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 très 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.

173
fernacolo