为了加快WebGL中许多相近对象的显示速度,我尝试(我猜是天真地)重复使用缓冲区内容。在每个对象的绘图例程中,我(稍微简化了一些):
if (! dataBuffered) {
dataBuffered = true;
:
: gl stuff here: texture loading, buffer binding and filling
:
}
// set projection and model-view matrices
gl.uniformMatrix4fv (shaderProgram.uPMatrix, false, pMatrix);
gl.uniformMatrix4fv (shaderProgram.uMVMatrix, false, mvMatrix);
// draw rectangle filled with texture
gl.drawArrays(gl.TRIANGLE_STRIP, 0, starVertexPositionBuffer.numItems);我的想法是纹理、顶点和纹理坐标缓冲区是相同的,但是模型视图矩阵会发生变化(在不同的地方相同的对象)。但是,唉,什么也没有出现。当我评论dataBuffered = true时,它是可见的。
所以我的问题是,drawArray()是丢弃还是清空缓冲区?还发生了什么?(如果这有关系的话,我正在learningwebgl.com学习课程。)
发布于 2013-10-17 21:38:03
简单地说,是的,您可以重用为多个gl.drawArrays()设置的所有状态。
http://omino.com/experiments/webgl/simplestWebGlReuseBuffers.html就是一个很小的例子,它只是改变一个统一的浮动(Y-比例尺)和重画,每勾两次。
(在这种情况下,不存在纹理,但其他一些状态仍然很粘稠。)
希望这能帮上忙!
uniformSetFloat(gl,prog,"scaleY",1.0);
gl.drawArrays(gl.TRIANGLES, 0, posPoints.length / 3);
uniformSetFloat(gl,prog,"scaleY",0.2);
gl.drawArrays(gl.TRIANGLES, 0, posPoints.length / 3);https://stackoverflow.com/questions/19430625
复制相似问题