2011-03-27 15 views
18

¿En qué casos querría tener un archivo adjunto de render en un OpenGL FBO, en lugar de un archivo adjunto de texturas, además del framebuffer predeterminado? Como, un accesorio de textura parece mucho más versátil.OpenGL FBO renderbuffer o text attatchment

+2

Me he estado preguntando sobre esto durante mucho tiempo. Supongo que existía una base de programas heredados basados ​​en PBuffer, y algunas personas no estaban dispuestas a adaptarse a un concepto diferente (es decir, escribir en texturas en lugar de escribir en PBuffer y copiar), por lo que la funcionalidad exacta de PBuffer se reimplementó en parte superior de FBO para alentarlos a usar FBO. Realmente no puedo pensar en ninguna otra razón, porque los archivos adjuntos de renderbuffer no son útiles en absoluto (tratando de evitar decir "retardado"). No hay una razón obvia inmediata por la que el renderizado a textura sea más lento (o diferente). – Damon

Respuesta

20

Las texturas le brindan más funciones (¡muestra !, formatos de variedad) y, por lo tanto, es más probable que estén sujetas a la pérdida de rendimiento.

La respuesta es simple: utilice Texturas donde tenga que muestrear desde la superficie (sin alternativas).

Use Render buffers donde no necesite muestras. El conductor puede o no decidir almacenar sus datos de píxeles de manera más efectiva en función de su intención expresa de no hacer el muestreo. Puede usar bl blitting después para hacer algo con el resultado.

+2

Finalmente, una respuesta buena y directa a esta simple pregunta. Gracias. Parece que muchos no tienen más que comentarios poco sólidos sobre este tema (en otras palabras, no lo saben). –

+0

¿Qué significa * muestra de la superficie *? ¿Puedes dar ejemplos más concretos donde uno necesita muestrear y cuándo no? – bluenote10

+1

@ bluenote10 por "muestreo" Me refiero a consultar valores particulares de la textura en un sombreador. Consulte "Funciones de búsqueda de texturas" en https://www.opengl.org/wiki/Sampler_%28GLSL%29 para obtener más información. Por ejemplo, si necesita desenfocar algo, su sombreador típicamente muestrea un área de píxeles y los pesa, por lo que necesita una fuente de textura. En el otro escenario, si solo quieres dibujar algo con la prueba de profundidad, puedes usar un buffer de renderizado en profundidad. – kvark

1

Extendiendo la pregunta a OpenGL | ES, otra razón para usar RenderBuffers en lugar de texturas también es que las texturas pueden no ser compatibles en algunas configuraciones y evitar que construya un FBO válido. Pienso específicamente en profundidad texturas, que no son compatibles de forma nativa en algunos hardware, por ejemplo nVidia Tegra 2/3.

Cuestiones relacionadas