Qual è la differenza tra FBO e PBO? Quale dovrei usare per il rendering fuori schermo?Quali sono le differenze tra un oggetto frame buffer e un oggetto buffer pixel in OpenGL?
risposta
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.
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:
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 è:
- A Buffer Object. Gli FBO sono non gli oggetti buffer. Ancora: framebuffer è una parola.
- 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.
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.
Speriamo solo che questo venga sopra-votato sopra la risposta di puro collegamento e la risposta errata (purtroppo accettata). –
@ChristianRau: ho controllato, e l'OP sembra essere un normale. Quindi c'è speranza che venga accettato. –