2012-03-24 10 views
9

Estoy tratando de escribir un programa que escribe fotogramas de la cámara de video en un quad. Vi tutoriales explicando que con framebuffers puede ser más rápido, pero aún así aprender a hacerlo. Pero además del framebuffer, encontré que también hay renderbuffers.¿Se requiere realmente Renderbuffer de GLSL?

La pregunta es, si el propósito es solo escribir una textura en un quad que llene la pantalla, ¿realmente necesito un renderbuffer?

Entiendo que los renderbuffer son para pruebas de profundidad, lo cual creo que es solo para verificar la posición Z del pixel, por lo tanto sería una tontería tener que crear un buffer de renderizado para mi escenario, ¿correcto?

Respuesta

10

A framebuffer object es un lugar para pegar imágenes para que pueda renderizarlas. Los búferes de color, los búfers de profundidad, etc. entran en un objeto framebuffer.

Un renderbuffer es como una textura, pero con dos diferencias importantes:

  1. Siempre es 2D y no tiene mipmaps. Por lo tanto, siempre es exactamente 1 imagen.
  2. Usted no puede leer desde un renderbuffer. Puede adjuntarlos a un FBO y renderizarlos, pero no puede muestrearlos con un acceso de textura o algo así.

Así que estás hablando de dos conceptos en su mayoría separados. Renderbuffers no tiene para ser "para pruebas de profundidad". Ese es un caso de uso común para renderbuffers, porque si renderiza los colores a una textura, generalmente no le importa la profundidad. Usted necesita profundidad porque necesita pruebas de profundidad para la eliminación de la superficie oculta. Pero no necesita muestra desde esa profundidad. Entonces, en lugar de crear una textura de profundidad, haces un buffer de representación de profundidad.

Pero los renderbuffers también pueden usar colores en lugar de formatos de profundidad. Usted simplemente no puede adjuntarlos como texturas. Todavía puede blit desde/hacia ellos, y aún puede leerlos de nuevo con glReadPixels. Simplemente no puedes leer de ellos en un sombreador.

Por extraño que parezca, esto no hace nada para responder a su pregunta:

La pregunta es, si el propósito es sólo para escribir una textura en un quad que llenará la pantalla, lo que realmente necesita un renderbuffer ?

no veo por qué necesita un framebuffer o una renderbuffer de ningún tipo. Una textura es una textura; simplemente dibuja un cuadrilátero texturizado.

+0

La razón por la que necesito utilizar un framebuffer es porque, como he leído en algunas páginas, esta es la única forma de hacer el renderizado de Ping-Pong. Y mi intención es usar esa técnica para aplicar varios efectos de filtro, así que necesito una forma de reutilizar la salida de una textura después de que haya pasado a través de un sombreador de fragmentos, para pasar algunos otros efectos según sea necesario. – PerracoLabs

+1

@ user848253: en el futuro, será más probable que obtenga información precisa si es más cercano a lo que está haciendo en realidad, en lugar de proporcionar la información mínima posible. Todo lo que has dicho en tu pregunta es que estás tratando de escribir una textura como un cuadrante de pantalla completa. –

+2

Bueno, todavía estoy reuniendo todo porque todo es nuevo para mí, estoy leyendo varios tutoriales, pero no pude encontrar uno que muestre todos los conceptos correctamente.La idea general es procesar cuadros de video con sombreadores, aplicar múltiples filtros y luego enviarlos a un cuadrante en la pantalla. – PerracoLabs