opengl rendering framebuffer

¿Cuál es el concepto y las diferencias entre Framebuffer y Renderbuffer en OpenGL?



rendering (2)

Estoy confundido sobre el concepto de Framebuffer y Renderbuffer. Sé que están obligados a procesar, pero quiero entenderlos antes de su uso.

Sé que se requiere un búfer de mapa de bits para almacenar el resultado del dibujo temporal. El buffer posterior Y el otro buffer debe ser visto en la pantalla cuando esos dibujos están en progreso. El buffer frontal. Y voltearlos, y dibujar de nuevo. Conozco este concepto, pero es difícil conectar esos objetos a este concepto.

¿Cuál es el concepto de y las diferencias de ellos?


El objeto Framebuffer no es en realidad un búfer, sino un objeto agregador que contiene uno o más archivos adjuntos, que por su vez, son los búferes reales. Puede comprender Framebuffer como una estructura C donde cada miembro es un puntero a un búfer. Sin ningún archivo adjunto, un objeto Framebuffer tiene una huella muy baja.

Ahora cada buffer asociado a un Framebuffer puede ser un Renderbuffer o una textura .

Renderbuffer es un búfer real (una matriz de bytes, enteros o píxeles). Renderbuffer almacena valores de píxeles en formato nativo, por lo que está optimizado para la representación fuera de pantalla. En otras palabras, dibujar en un Renderbuffer puede ser mucho más rápido que dibujar en una textura. El inconveniente es que los píxeles usan un formato nativo dependiente de la implementación, por lo que leer desde un Renderbuffer es mucho más difícil que leer desde una textura. Sin embargo, una vez que se ha pintado un Renderbuffer , uno puede copiar su contenido directamente a la pantalla (o a otro Renderbuffer , supongo), muy rápidamente usando operaciones de transferencia de píxeles. Esto significa que se puede usar un Renderbuffer para implementar de manera eficiente el patrón de doble buffer que mencionaste.

Renderbuffers es un concepto relativamente nuevo. Antes de ellos, se utilizaba un framebuffer para representar una textura , que puede ser más lenta porque una textura usa un formato estándar. Todavía es posible renderizar a una textura, y eso es bastante útil cuando uno necesita realizar múltiples pasadas sobre cada píxel para construir una escena, o dibujar una escena en una superficie de otra escena.

El wiki de OpenGL tiene esta página que muestra más detalles y enlaces.


Esta página tiene algunos detalles que creo que explican la diferencia bastante bien. En primer lugar:

El destino final de representación de la tubería OpenGL se llama [el] framebuffer .

Mientras:

Objeto Renderbuffer
Además, el objeto renderbuffer se acaba de presentar para la representación fuera de la pantalla. Permite renderizar una escena directamente a un objeto renderbuffer, en lugar de renderizar a un objeto de textura. Renderbuffer es simplemente un objeto de almacenamiento de datos que contiene una sola imagen de un formato interno que puede renderizarse. Se usa para almacenar almacenamientos intermedios lógicos de OpenGL que no tienen el formato de textura correspondiente, como el stencil o el buffer de profundidad.