Dla 'pulpitu' OpenGL, nie jest dobrym wyjaśnieniem tutaj:
http://www.opengl.org/wiki/Buffer_Object
Zasadniczo parametr Wykorzystanie to wskazówka do OpenGL/WebGL, w jaki sposób zamierza wykorzystać bufor. OpenGL/WebGL może następnie zoptymalizować bufor w zależności od podpowiedzi.
OpenGL ES docs pisze co następuje, co nie jest dokładnie taka sama jak dla OpenGL (pamiętaj, że WebGL jest dziedziczona z OpenGL ES):
STREAM zawartość przechowują
- dane będą być modyfikowane tylko raz i używane najwyżej kilka razy.
STATIC zawartość przechowują
- dane zostaną zmodyfikowane raz i używane wielokrotnie.
DYNAMIC zawartość przechowują
- dane będą wielokrotnie modyfikowane i wykorzystywane wielokrotnie.
Rodzaj dostępu musi być:
NARYSUJ
- Zawartość przechowują dane zostały zmodyfikowane przez zastosowanie i stosowano jako źródło dla poleceń rysunku GL specyfikacji obrazu.
Najczęściej używany jest STATIC_DRAW (geometrii statyczne), ale ostatnio stworzony niewielki system cząstek, w którym DYNAMIC_DRAW bardziej sensowne (cząstki są przechowywane w jednym buforem, w których części bufora jest aktualizowany, gdy cząsteczki są emitowane).
http://jsfiddle.net/mortennobel/YHMQZ/
Fragment kodu:
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;
}
Jeśli ustawione coś jak DYNAMIC_DRAW, jak mogłoby zrobić 'Aktualizacja' bufora?Bez aktualizacji, wykonaj następujące czynności: utwórz bufor, powiązaj go, buforuj dane, wyślij do programu cieniującego. Gdzie odbywa się aktualizacja? –
Po utworzeniu bufora i wypełnieniu go wartościami początkowymi za pomocą gl.bufferData, można zaktualizować bufor (lub jego część) w innej ramce, używając funkcji gl.bufferSubData. Spróbuj spojrzeć na kod źródłowy skrzypiec - powinno być dość łatwo zobaczyć, co się dzieje. – Mortennobel
Tylko ktoś, kto przyjrzy się tej odpowiedzi, jeśli spojrzysz na link do dokumentacji, zobaczysz, że losowanie strumienia jest właściwie modyfikowane i często używane. Nie to, że modyfikujesz tylko raz. – Ellie