2009-04-14 9 views

risposta

17

A FBO (oggetto Framebuffer) è una destinazione in cui è possibile eseguire il rendering di immagini diverse dal frame buffer o dallo schermo predefinito.

A PBO (Pixel Buffer Object) consente asincrono trasferimenti di dati pixel da e verso il dispositivo. Questo può essere utile per migliorare le prestazioni generali durante il rendering se hai altre cose che possono essere fatte mentre aspetti il ​​trasferimento dei pixel.

12

avrei letto VBOs, PBOs and FBOs:

Apple ha pubblicato due molto belle bit di PBO codice di esempio che dimostrano e FBO. Anche se sono specifici per Mac , come codice di esempio sono validi su qualsiasi platoform perché gli PBO e gli FBO sono estensioni OpenGL, non estensioni del sistema di finestre.

Quindi, quali sono tutti questi oggetti? Ecco la situazione:

70

Qual è la differenza tra FBO e PBO?

Una domanda migliore è come sono simili. L'unica cosa che è simile a loro è il loro nomi.

A Framebuffer Object (notare la maiuscola: framebuffer è una parola, non due) è un oggetto che contiene più immagini che possono essere utilizzate come destinazioni di rendering.

A Pixel Buffer Object è:

  1. A Buffer Object. Gli FBO sono non gli oggetti buffer. Ancora: framebuffer è una parola.
  2. Un oggetto buffer che viene utilizzato per asincrono uploading/downloading of pixel data to/from images.

Se si desidera eseguire il rendering su una trama o solo su uno non-screen framebuffer, si utilizzano gli FBO. Se stai tentando di leggere i dati dei pixel nell'applicazione in modo asincrono o se stai tentando di trasferire i dati dei pixel in immagini OpenGL in modo asincrono, puoi utilizzare i PBO.

Non sono uguali.

+5

Speriamo solo che questo venga sopra-votato sopra la risposta di puro collegamento e la risposta errata (purtroppo accettata). –

+0

@ChristianRau: ho controllato, e l'OP sembra essere un normale. Quindi c'è speranza che venga accettato. –

4

Voglio evidenziare qualcosa.

FBO non è un blocco di memoria. Penso che assomigli a una struttura di puntatore. Devi usare Texture su FBO per usarlo. Dopo aver applicato Texture, ora puoi disegnare per il rendering fuori schermo o per un effetto di secondo passaggio.

struct FBO{ 
AttachColor0 *ptr0; 
AttachColor1 *ptr1; 
AttachColor2 *ptr2; 
AttachDepth *ptr3; 
}; 

In altra parte, PBO è blocco di memoria "blocco per contenere tipo di memoria."Prova a considerarlo come malloc di dimensione x, quindi puoi usare memcpy per copiare i dati da esso a texture/FBO o ad esso".

  • Perché utilizzare PBO?

Creare un buffer di memoria intermedio per interfacciare con la memoria dell'Host e non interrompere il disegno OpenGL caricherà la trama verso o dall'host.

Problemi correlati