Webgl bufferData-使用参数差异
在阅读Khronos的规范时,我发现:Webgl bufferData-使用参数差异,webgl,Webgl,在阅读Khronos的规范时,我发现: bufferData(ulong target, Object data, ulong usage) “用法”参数可以是:流绘制、静态绘制或动态绘制 我的问题是,我应该使用哪一个? 优势是什么,区别是什么? 为什么我会选择使用其他方式来代替静态画图 谢谢。对于“桌面”OpenGL,这里有一个很好的解释: 基本上,usage参数是对OpenGL/WebGL如何使用缓冲区的提示。然后,OpenGL/WebGL可以根据提示优化缓冲区 写入以下内容,这与Op
bufferData(ulong target, Object data, ulong usage)
“用法”参数可以是:流绘制、静态绘制或动态绘制
我的问题是,我应该使用哪一个?
优势是什么,区别是什么?
为什么我会选择使用其他方式来代替静态画图
谢谢。对于“桌面”OpenGL,这里有一个很好的解释: 基本上,usage参数是对OpenGL/WebGL如何使用缓冲区的提示。然后,OpenGL/WebGL可以根据提示优化缓冲区 写入以下内容,这与OpenGL不完全相同(请记住,WebGL是从OpenGLES继承的): 溪流
- 数据存储内容将修改一次,最多使用几次
- 数据存储内容将被修改一次并多次使用
- 数据存储内容将被反复修改和多次使用
- 数据存储内容由应用程序修改,并用作GL图形和图像规范命令的源
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;
}
如果将某个内容设置为DYNAMIC_DRAW,我将如何“更新”缓冲区?在不更新的情况下,步骤是:创建缓冲区、绑定缓冲区、缓冲数据、将其发送到着色器程序。在何处进行更新?在使用gl.bufferData创建缓冲区并用初始值填充后,可以使用gl.bufferSubData函数在另一帧中更新缓冲区(或其部分)。试着看一看fiddle的源代码——应该很容易看到发生了什么。只要向任何看到这个答案的人提醒一下,如果你看一下文档的链接,你就会发现流绘制实际上是你经常修改和使用的。并不是说您只修改了一次。@Ellie注意,第一个链接是指向OpenGL解释的,而不是指向OpenGL ES(WebGL)。他们似乎differ@CiprianTomoiaga我实际上指的是第二个链接,但正如你所说,gl和GLE似乎各处都有一些不同。