2012-03-24 14 views
9

Sto provando a scrivere un programma che scrive i fotogrammi della videocamera in un quad. Ho visto tutorial che spiegavano che con i framebuffer si può essere più veloci, ma si sta ancora imparando come farlo. Ma poi oltre al framebuffer, ho scoperto che ci sono anche i renderbuffer.GLSL Renderbuffer veramente richiesto?

La domanda è, se lo scopo è solo di scrivere una trama in un quad che riempirà lo schermo, ho davvero bisogno di un renderbuffer?

Capisco che i renderbuffer sono per il test di profondità, che penso sia solo per il controllo della posizione Z del pixel, quindi sarebbe sciocco dover creare un buffer di rendering per il mio scenario, corretto?

risposta

10

A framebuffer object è un posto dove incollare immagini in modo che sia possibile renderizzarle. Buffer di colore, buffer di profondità, ecc. Vanno tutti in un oggetto framebuffer.

Un renderbuffer è come una texture, ma con due importanti differenze:

  1. E 'sempre in 2D e non ha mipmap. Quindi è sempre esattamente 1 immagine.
  2. non è possibile leggere da un renderbuffer. Puoi collegarli a un FBO e renderli a loro, ma non puoi campionarli da loro con un accesso alla trama o qualcosa del genere.

Quindi stai parlando di due concetti per lo più separati. I Renderbuffer non hanno "" per il test di profondità. " Questo è un caso di uso comune per i renderbuffer, perché se stai rendendo i colori a una trama, di solito non ti interessa la profondità. È una profondità perché è necessario test di profondità per la rimozione della superficie nascosta. Ma non è necessario campione da quella profondità. Quindi, invece di creare una texture di profondità, realizzi un renderbuster di profondità.

Ma i renderbuffer possono anche utilizzare i colori piuttosto che i formati di profondità. Non puoi semplicemente collegarli come trame. Puoi ancora saltare da/a loro, e puoi ancora leggerli di nuovo con glReadPixels. Non puoi leggere da loro in uno shader.

Stranamente, questo non fa nulla per rispondere alla tua domanda:

La domanda è, se lo scopo è solo quello di dare una texture in un quad che riempirà lo schermo, ne ho veramente bisogno di un renderbuffer ?

Non vedo perché è necessario un framebuffer o un renderbuffer di qualsiasi tipo. Una trama è una trama; basta disegnare un quad strutturato.

+0

Il motivo per cui ho bisogno di usare un framebuffer è perché, come leggo in alcune pagine, è l'unico modo per eseguire il rendering Ping-Pong. E la mia intenzione è quella di usare tale tecnica per applicare diversi effetti filtro, quindi ho bisogno di un modo per riutilizzare l'output di una texture dopo che è passato attraverso uno shader di frammenti, per passare alcuni altri effetti come richiesto. – PerracoLabs

+1

@ user848253: in futuro, avrai maggiori probabilità di ottenere informazioni accurate se sarai più disponibile su ciò che stai effettivamente facendo, piuttosto che fornire le informazioni minime possibili. Tutto quello che hai detto nella tua domanda è che stai cercando di scrivere una trama come quad a tutto schermo. –

+2

Beh, sto ancora mettendo tutto insieme perché tutto è nuovo per me, sto leggendo diversi tutorial, ma non ne ho trovato uno che mostri tutti i concetti direttamente.L'idea generale è di elaborare i fotogrammi video con ombreggiatori, applicare più filtri e quindi inviarli a un quad sullo schermo. – PerracoLabs