Alo*_*alo 5 performance google-chrome webgl
function render(time, scene) {
if (useFramebuffer) {
gl.bindFramebuffer(gl.FRAMEBUFFER, scene.fb);
}
gl.viewport(0.0, 0.0, canvas.width, canvas.height);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
gl.enable(gl.DEPTH_TEST);
renderScene(scene);
gl.disable(gl.DEPTH_TEST);
if (useFramebuffer) {
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
copyFBtoBackBuffer(scene.fb);
}
window.requestAnimationFrame(function(time) {
render(time, scene);
});
}
Run Code Online (Sandbox Code Playgroud)
我无法分享我使用的确切代码,但是一个模型将说明我的观点。
我正在渲染一个相当复杂的场景,并且还在WebGL中进行了一些光线追踪。我注意到了两个非常奇怪的性能问题。
1)两次运行之间的帧率不一致。有时,当页面开始时,最初的约100帧在25ms内渲染,然后突然下降到45ms,而无需用户输入或更改场景。我不会更新帧中的任何缓冲区或纹理数据,而仅更新着色器制服。发生这种情况时,GPU内存将保持不变。
2)渲染到默认帧缓冲区比使用额外的传递慢。如果渲染到创建的frambuffer,然后渲染到HTML canvas(默认的framebuffer),则性能提高了10%。因此,在代码段中,如果useFramebuffer == true获得了性能,这似乎非常不直观。
编辑1:
由于需求的变化,场景将始终渲染到帧缓冲区,然后复制到画布。这使问题2)成为非问题。
编辑2:
在以下系统上测试了PC的系统规格:
编辑3:
我使用chrome:tracing描绘了场景。前约100-200帧渲染16.6ms。
我将尝试使用计时器查询来分析所有内容,但恐怕每个渲染实际上花费相同的时间,并且缓冲区交换将随机花费两倍的时间。
我注意到的另一件事是,当我使用Chrome一段时间后,这种情况开始发生。问题开始时,清除浏览器缓存或取消Chrome进程无济于事,只有重新启动系统才能起作用。
Chrome是否有可能一时兴起地限制GPU?
PS帧时间由于一些优化而改变,但核心问题仍然存在。
| 归档时间: |
|
| 查看次数: |
274 次 |
| 最近记录: |