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 tenus de rendre, Mais je veux les comprendre avant utilisation.

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

Quel est le concept et les différences?

109
demandé sur Cœur 2010-02-06 15:14:15

2 réponses

Cette page a quelques détails qui, je pense, expliquent assez bien la différence. Tout d'abord:

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

Considérant ce qui suit:

Objet Renderbuffer
En outre, renderbuffer objet est nouvellement introduit pour le rendu hors écran. Il permet de rendre une scène directement à un objet renderbuffer, au lieu de rendre à un objet de texture. Renderbuffer est simplement un objet de stockage de données contenant une seule image d'un format interne consultable. Il est utilisé pour stocker les tampons logiques OpenGL qui n'ont pas de format de texture correspondant, tels que stencil ou depth buffer.

53
répondu ChrisF 2010-02-06 12:33:20

L'objetFramebuffer n'est pas réellement 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 {[2] } en tant que structure C où chaque membre est un pointeur vers un tampon. Sans aucune pièce jointe, un objet Framebuffer a une empreinte très faible.

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

Le Renderbuffer est un tampon réel (un tableau d'octets, ou 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 Renderbuffer peut être beaucoup plus rapide que dessiner sur une texture. L'inconvénient est que pixels utilise 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 un Renderbuffer a été peint, on peut copier son contenu directement à l'écran (ou à 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 double tampon que vous avez mentionné.

Renderbuffers est un concept relativement nouveau. Avant eux, un Framebuffer était utilisé pour rendre à une texture , qui peut être plus lente 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 {[42] } qui montre plus de détails et de liens.

153
répondu fernacolo 2017-04-23 04:35:51