在阅读Khronos的规范时,我发现:
bufferData(ulong target, Object data, ulong usage) “‘usage”参数可以是: STREAM_DRAW、STATIC_DRAW或DYNAMIC_DRAW
我的问题是,我应该使用哪一个?它们的优势是什么,区别是什么?为什么我要选择使用其他的STATIC_DRAW?
谢谢。
发布于 2013-05-09 23:21:51
对于‘桌面’OpenGL,这里有一个很好的解释:
http://www.opengl.org/wiki/Buffer_Object
基本上,使用参数是一个提示,告诉OpenGL/WebGL你打算如何使用这个缓冲区。然后,OpenGL/WebGL可以根据您的提示优化缓冲区。
OpenGL docs编写以下代码,这与用于OpenGL的代码不完全相同(请记住,WebGL是从OpenGL ES继承的):
流
静态
动态
访问的性质必须是:
画
最常见的用法是STATIC_DRAW (用于静态几何体),但我最近创建了一个小粒子系统,其中DYNAMIC_DRAW更有意义(粒子存储在单个缓冲区中,其中缓冲区的一部分在粒子发射时更新)。
http://jsfiddle.net/mortennobel/YHMQZ/
代码片段:
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;
}https://stackoverflow.com/questions/16462517
复制相似问题