per OpenGL 'desktop', c'è una buona spiegazione qui:
http://www.opengl.org/wiki/Buffer_Object
In sostanza, parametri di utilizzo è un suggerimento a OpenGL/WebGL su come si intende utilizzare il buffer. OpenGL/WebGL può quindi ottimizzare il buffer in base al suggerimento.
Il OpenGL ES docs scrive quanto segue, che non è esattamente la stessa che per OpenGL (ricordiamo che WebGL è ereditato da OpenGL ES):
STREAM contenuti dei negozi
- I dati saranno essere modificato una volta e utilizzato al massimo un paio di volte.
STATIC
- i dati contenuti dei negozi saranno modificate una volta e utilizzati più volte.
DYNAMIC
- i dati contenuti dei negozi saranno modificati più volte e utilizzati più volte.
La natura di accesso deve essere:
DRAW
- I contenuti dell'archivio dati vengono modificati dall'applicazione, e utilizzati come sorgente per i comandi di disegno GL e specifica immagine.
L'uso più comune è STATIC_DRAW (per geometria statica), ma hanno recentemente creato un sistema piccola particella dove DYNAMIC_DRAW rende più senso (le particelle vengono memorizzati in un singolo buffer, dove le parti del buffer viene aggiornato quando particelle sono emesse).
http://jsfiddle.net/mortennobel/YHMQZ/
Codice frammento:
function createVertexBufferObject(){
particleBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, particleBuffer);
var vertices = new Float32Array(vertexBufferSize * particleSize);
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.DYNAMIC_DRAW);
bindAttributes();
}
function emitParticle(x,y,velocityX, velocityY){
gl.bindBuffer(gl.ARRAY_BUFFER, particleBuffer);
// ...
gl.bufferSubData(gl.ARRAY_BUFFER, particleId*particleSize*sizeOfFloat, data);
particleId = (particleId +1)%vertexBufferSize;
}
Se impostare qualcosa come DYNAMIC_DRAW, come dovrei fare 'aggiornamento' del buffer?Senza aggiornare, i passaggi sono: creare un buffer, associarlo, bufferData, inviarlo al programma shader. Dove si verifica l'aggiornamento? –
Dopo aver creato il buffer e riempito con i valori iniziali usando gl.bufferData, è possibile aggiornare il buffer (o parte di esso) in un altro frame usando la funzione gl.bufferSubData. Prova a dare un'occhiata al codice sorgente del violino: dovrebbe essere abbastanza facile vedere cosa sta succedendo. – Mortennobel
Basta dare un'occhiata a tutti coloro che stanno guardando questa risposta, se si guarda il link alla documentazione, vedrete che il flusso è in realtà se modificate e usate frequentemente. Non che tu modifichi solo una volta. – Ellie