【发布时间】:2014-07-07 17:54:59
【问题描述】:
对my previous question 的回答建议我使用顶点缓冲区对象并将我的位置数据与我的颜色数据合并到一个数组中,我现在已经在这个简单的测试用例中完成了:
http://jsfiddle.net/headchem/r28mm/14/
每一帧的伪代码:
function drawFrame() {
// clear global vertex[] array containing both position and color
// recreate it with new triangles and colors (determined elsewhere)
drawShapes();
// put the vertex array into the VBO using gl.bufferData
// finish with a single call to gl.drawArrays(gl.TRIANGLES, 0, numItems);
render();
}
我知道没有灵丹妙药,但对于我的目标是渲染一个充满变化的独特三角形的屏幕,这是最有效的方法吗?使用 bufferSubData 会比 bufferData 有什么好处吗?
当我在动画循环中对此进行测试时,我可以在帧速率受到影响之前每帧更新大约 800 个三角形。当我想要在每一帧上都有独特的和不断变化的三角形时,我能做的就是这个限制吗?我看到人们扔出更大的数字,比如 50k 三角形 - 是因为他们能够在显卡上缓存顶点数组并且不需要更改每一帧上的每个顶点和颜色?使用 canvas api 时,我可以在帧率下降之前绘制 1500 个不同颜色和定位的矩形 - 我的 WebGL 做错了什么,canvas api 的性能优于它?
【问题讨论】: