2010-02-04 18 views
15

Me pregunto desde hace mucho tiempo cuál sería la mejor manera de manejar OpenGL FrameBuffer Objects (FBO). Cambiar las FBO puede ser costoso pero también definir nuevos archivos adjuntos.¿Cuál es la mejor manera de manejar FBO en OpenGL?

¿Cómo lo haces rápido?

que dudan entre estos 3:

  • 1 OBF por todo, Sistema de acoplamiento, pero no cambian entre las OBF

  • 1 OBF para cada destino de representación (tamaño + formato) en la prestación camino. Eso significa que volveré a usar el mismo FBO para objetivos de renderizado similares. Pero de esta forma una imagen borrosa personalizada costaría 4+ FBO.

  • 1 OBF para cada destino de representación, accesorios del juego de una sola vez y cambiar entre las OBF

Además, debería minimizar el número de cambios de FBO (como puedo minimizar el número de enlaces de textura)?

+0

primero ... ¿qué es un FBO? Si va a utilizar un acrónimo varias veces, se recomienda utilizarlo sin expandir la primera vez. – fortran

+4

FBO = Framebuffer Objeto – ponce

+0

Buena pregunta. Sin embargo, la primera parte de la respuesta a continuación contradice lo que se dice en el libro "OpenGL Insights". El libro afirma que cambiar entre varias FBO es costoso y lo mejor para aumentar el rendimiento es utilizar múltiples archivos adjuntos al mismo FBO. –

Respuesta

14

referencias Actualizado:


NVIDIA 2005 (probablemente obsoleta): La última recomendación oficial rendimiento por NVIDIA sé que tiene casi cinco años.En su GDC presentation, Simon Green recomienda lo siguiente (diapositiva 29):

Con el fin de aumentar el rendimiento:

  1. múltiples organizaciones religiosas
    • crear una OBF separado para cada textura que desea renderizar a
    • interruptor
    • usando BindFramebuffer()
    • puede ser 2 veces más rápido que wglMakeCurrent() en los controladores beta NVIDIA
  2. individual FBO, varios archivos adjuntos textura
    • texturas deben tener el mismo formato y las dimensiones
    • uso FramebufferTexture() para cambiar entre texturas
  3. individual FBO, varios archivos adjuntos textura
    • adjuntar texturas a diferentes archivos adjuntos de color
    • uso glDrawBuffer() para cambiar la representación de distintos embargos de color

En mi experiencia, el segundo caso es realmente más rápido que el primero (ATI Radeon HD4850, Geforce 8800GT). No he probado el tercer caso, ya que habría complicado mi código.

+0

La [presentación de GDC aquí] (https://developer.nvidia.com/sites/default/files/akamai/gamedev/docs/Porting%20Source%20to%20Linux.pdf) menciona que no se deben cambiar los archivos adjuntos porque, al parecer, lleva a mal desempeño. Por lo tanto, contradice esta orden de rendimiento. – Deathicon

+0

Tenga en cuenta que la presentación que mencioné es de 2005 y mis resultados son de 2009. No me sorprendería si el orden del rendimiento cambiara en la última década. –

+0

También agregaría este [enlace] (https://software.intel.com/en-us/articles/opengl-performance-tips-swap-frame-buffer-objects-fbo-instead-of-surfaces-using- a-single), que mencionan un mejor rendimiento para cambiar los FBO (n. ° 1) en lugar de cambiar los adjuntos (n. ° 2 y n. ° 3). Sería una buena idea actualizar la respuesta a esta pregunta. – Deathicon

4

Como cuestión de filosofía, modificar un estado de objeto requiere que se vuelva a validar. En cambio, simplemente cambiar el enlace del objeto (que ya es válido desde el cuadro anterior) debería ser más rápido para el controlador [1].

Así que, como primera implementación, iría por 1 FBO por cada objetivo de renderizado (o más precisamente, renderizar como objetivo establecer. Por lo general, se procesa en varios búferes a la vez).

Dicho esto, nada supera a la evaluación comparativa de su aplicación frente a múltiples implementaciones.

[1] Menciono para el controlador, porque un cambio de FBO puede forzar el enjuague de una GPU, según la arquitectura. Introducirá burbujas en la mayoría de los casos. Entonces definitivamente es algo que no quieres hacer a menudo. Es más importante que optimizar los enlaces de textura, p.

Cuestiones relacionadas