2011-03-27 12 views
18

In quali casi dovrei avere un allegato renderbuffer in un OpenGL FBO, invece di un attacco di texture, oltre che per il framebuffer di default? Come, un attaccamento di trama sembra molto più versatile.OpenGL FBO renderbuffer o texture attatchment

+2

Me lo chiedo a questo per un lungo periodo di tempo. La mia ipotesi è che esisteva una base di programmi legacy basati su pBuffer, e alcune persone non erano disposti ad adattarsi ad un concetto diverso (cioè scrivere a consistenza invece di scrittura per pBuffer e copia), quindi la funzionalità esatto pBuffer è stato re-implementato su cima di FBO per incoraggiarli a utilizzare FBO. Non riesco davvero a pensare ad alcun altro motivo, perché gli allegati di renderbuffer non sono affatto utili (cercando di evitare di dire "ritardati"). Non c'è una ragione immediatamente ovvia per cui il rendering in texture debba essere più lento (o diverso). – Damon

risposta

20

Textures forniscono ulteriori funzionalità per voi (campionamento !, formati diversi) e, quindi, sono più propensi soggetti a perdita di prestazioni.

La risposta è semplice: utilizzare Textures ovunque sia necessario campionare dalla superficie (senza alternative).

Utilizzare Buffer di rendering ovunque non sia necessario campionare. Il guidatore può decidere o meno di memorizzare i dati dei pixel in modo più efficace in base all'intenzione esplicita di non eseguire il campionamento. Puoi usare GL blitting in seguito per fare qualcosa con il risultato.

+2

Infine, una buona risposta diretta a questa semplice domanda. Grazie. Sembra che molti non abbiano altro che sdolcinati commenti su questo argomento (in altre parole - non sanno). –

+0

Cosa significa * campione dalla superficie *? Puoi dare esempi più concreti dove è necessario campionare e quando no? – bluenote10

+1

@ bluenote10 di "campionamento" Voglio dire interrogare determinati valori della trama in uno shader. Vedi "Funzioni di ricerca della trama" su https://www.opengl.org/wiki/Sampler_%28GLSL%29 per maggiori informazioni. Ad esempio, se hai bisogno di sfocare qualcosa, lo shader tipicamente campiona un'area di pixel e li appesantisce, quindi hai bisogno di una fonte di texture. Nell'altro scenario, se si desidera disegnare qualcosa con il test di profondità, è possibile utilizzare un buffer di rendering di profondità. – kvark

1

Estendendo la domanda a OpenGL | ES, un altro motivo per utilizzare RenderBuffers anziché trame è anche che le trame potrebbero non essere supportate in alcune configurazioni e impedire la creazione di un FBO valido. In particolare mi pare circa profondità texture, che non sono supportati in modo nativo su alcuni componenti hardware, per esempio nVidia Tegra 2/3.

Problemi correlati