WebGL绘制调用真的非常慢吗?

时间:2016-05-28 01:11:01

标签: optimization webgl

我有一段时间没有使用桌面OpenGL,但WebGL似乎很慢。 只需几百个相对简单的绘制调用,FPS即可进入转储阶段。

我认为我的代码非常优化。 它渲染模型,其中每个模型由网格+材质的批处理组成,每个批处理都使用实例渲染进行渲染,以便渲染模型的所有实例,每个实例都有自己的每个实例数据,如转换等。 / p>

我有什么遗失的吗?

作为旁注,正常渲染比实例渲染更慢,正如预期的那样,但仍有几百个调用会破坏帧速率。

1 个答案:

答案 0 :(得分:6)

相比什么慢? Unity和Unreal都导出到WebGL并且速度合理。在我的2015年早期MBP中,我以60fps on this demo获得了6000多次绘制调用,在集成图形模式下运行的Chrome(ATM太懒,无法切换到离散状态,速度更快)。我将其设置为4000 fish,然后将其粘贴到JavaScript控制台g_fishTable[0].num[8] = 6000中。即使把它带到16000个电话,我仍然得到43fps。

你有可能生成垃圾吗?作为一个例子

 gl.uniform4fv(someLocation, [1, 2, 3, 4]);  // Generates garbage

该行创建可能每次都会创建一个新数组。

同样,您每帧都会制作新矩阵或重新使用旧矩阵,以确保您不会产生垃圾。

同样,类型数组应该比标准JavaScript数组快

换句话说

var vector = [0, 0, 0, 0];   // slow

VS

var vector = new Float32Array(4);  // fast

创建它们可能会或者可能不会更快,但这并不重要,因为您应该在初始化时创建它们而不是渲染时间。虽然在每种情况下AFAIK都会使用typedarrays的用法会更快。

也许你应该查看JavaScript profiler