Esempio:Puoi utilizzare più target con un singolo VBO?
1. glGenBuffers(1, &VboId);
2. glBindBuffer(GL_ARRAY_BUFFER, VboId);
3. glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
4. glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
Così abbiamo generare una maniglia generica VBO, e poi associarlo con "GL_ARRAY_BUFFER". Binding sembra avere 2 finalità:
- Dobbiamo legare il buffer prima di poter copiare i dati alla GPU tramite
glBufferData
- Dobbiamo legare il buffer prima di poter aggiungere attributi ad esso tramite
glVertexAttribPointer
E penso che quelle siano le uniche 2 volte necessarie per vincolare il VBO. La mia domanda è: esiste uno scenario in cui il target (GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER, GL_PIXEL_PACK_BUFFER o GL_PIXEL_UNPACK_BUFFER) sarà diverso sulle righe 2 e 3? O vorremmo ricollegarlo a un target diverso prima della riga 4?
È possibile associare più destinazioni buffer a un singolo VBO?
Oooh! Grazie! Questo ha molto più senso ora. Era il mio modo di pensare all'indietro che mi stava buttando fuori. – mpen
In realtà, per quanto riguarda il paragrafo 3, stai dicendo che "glBufferData" prende una destinazione per le loro operazioni su cui lavorare ... quindi stai dicendo che in sostanza si sta utilizzando 'GL_ARRAY_BUFFER' come buffer di lavoro temporaneo? Perché è necessario associare l'oggetto buffer alla destinazione e quindi specificare nuovamente la destinazione in "glBufferData", quindi? In sostanza ho provato a scambiare le righe 2 e 3 nella mia domanda, e il programma non funziona più. Sto cercando di capire perché dovresti specificare il bersaglio due volte, a meno che non stiano facendo qualcosa di diverso. – mpen
Nevermind .. Penso che l'ho appena capito. Associamo l'oggetto buffer alla destinazione e quindi essenzialmente i dati vengono inviati a tale destinazione e quindi indirettamente all'oggetto buffer. Quindi entrambi sono necessari. Sto pensando a questo correttamente? I dati vengono legati all'oggetto buffer, quindi possiamo cancellare 'GL_ARRAY_BUFFER' immediatamente dopo aver chiamato glBufferData senza perdere nulla. Immagino che funzioni allo stesso modo dei puntatori degli attributi. – mpen