El objeto framebuffer (FBO) es una extensión de OpenGL que permite renderizar de forma flexible en búferes fuera de pantalla , incluyendo el renderizado en un búfer de texturas . Se puede utilizar para implementar una gran variedad de filtros de imagen y efectos de posprocesamiento , renderizando primero las imágenes en el búfer fuera de pantalla, aplicando los efectos y, finalmente, enviándolas al búfer en pantalla.
El FBO se utiliza en OpenGL por su eficiencia y facilidad de uso. El uso de FBO no presenta la sobrecarga asociada con el cambio de contexto de dibujo de OpenGL y ha reemplazado en gran medida al pbuffer y otros métodos que utilizan el cambio de contexto.
El FBO es análogo al modelo de objetivos de renderizado en DirectX .
Usos
El FBO tiene dos usos principales: el postprocesamiento de imágenes renderizadas y la composición entre diferentes escenas. Algunos ejemplos son:
- La imagen renderizada se captura y se somete a sombreadores de fragmentos u otras manipulaciones. Esto permite realizar muchos de los efectos gráficos por computadora más populares de la actualidad, incluyendo la adición de un efecto de desenfoque o brillo.
- Se puede usar para crear vistas de otras escenas, por ejemplo: un televisor en una casa que muestra la vista desde una cámara secundaria. Una escena se puede renderizar a través de un FBO a una textura, y luego esa textura se puede aplicar a la superficie de un televisor. Esto a veces se denomina "renderizar a textura" o RTT.
Ventajas sobre otros métodos
Los métodos que involucran al FBO se consideran superiores porque:
- Su configuración es más sencilla que la de la mayoría de los otros métodos.
- No requiere cambio de contexto.
- Es más eficiente porque los recursos se comparten dentro del mismo contexto.
- Es más flexible porque se puede adquirir todo el búfer de profundidad , el búfer de plantilla , etc.
Arquitectura
Para usar un FBO, basta con crear una instancia del mismo. Junto con el FBO vienen varios adjuntos. Estos se pueden adjuntar a un receptor elegido: una textura o un búfer de renderizado . Un FBO puede exponer múltiples puntos de adjunto de color (GL_COLOR_ATTACHMENT0 y superiores), y las aplicaciones normalmente comprueban que el conjunto de adjuntos elegido esté completo en el búfer de fotogramas antes de renderizar en él. [ 1 ]
Por ejemplo:
- Crea un FBO y vincúlalo.
- Adjunte el búfer de color (ya sea como un RenderBuffer o una textura) al FBO.
- Adjunte el búfer de profundidad (ya sea como un RenderBuffer o una textura) al FBO.
- Vincular el FrameBuffer de ventana nativo (id=0)
- Renderiza la textura en pantalla con un sombreador de píxeles, que depende tanto de la información de color como de la información de profundidad.
Referencias
- ↑ "Especificación del perfil principal de OpenGL 4.5" (PDF) . Grupo Khronos.
Enlaces externos
- Objeto Framebuffer en la Wiki de OpenGL
- Documento técnico sobre el objeto framebuffer. Archivado el 2 de mayo de 2013 en la Wayback Machine.
- Referencia del objeto framebuffer en openvidia
- Código de ejemplo para Windows y Linux
- EXT Framebuffer (opengl.org)
- OpenGL