2014-11-23 59 views
1

我开发了一些网站,其中有许多数据在屏幕上绘图。 用户可以在数据之间拖放,放大&。WebGL冲洗和完成

我在我的电脑上运行一个好的图形卡,交互非常流畅。 我在不同的图形卡上运行它,图像在我的鼠标光标后运行。几毫秒后它回到正确的位置。

当我在openGL中编程时,我只是简单地使用glFlush & glFinish这种方法,等待所有GPU处理结束。 WebGL中有相同的内容,但由于某种原因它不起作用。 在使用这种方法的openGL中伤害了绘制速度,但对于我的用户来说,它比在光标后面看到图像运行要好。

在WebGL中还有其他的技巧可以做到吗?

p.s.我正在使用最新版本的Chrome。

回答

1

如果您还没有,请确保您正在从​​回调中完成所有绘图。也就是说,不要重新响应事件,而是如果有任何更改,则安排一个单个回调。

// need to redraw 
window.addEventListener('mousemove', function (event) { // or whatever 
    ... update drawing parameters, but don’t draw ... 
    markDirty(); 
}, false); 

... 

var scheduled = false; 
function markDirty() { 
    if (!scheduled) { 
    scheduled = true; 
    requestAnimationFrame(draw); 
    } 
} 

... 

function draw() { 
    scheduled = false; 

    ... do WebGL things here ... 
} 

这将确保你没有做比浏览器更图纸能跟上(就像你看到滞后的一个可能的原因),而且它发生在最好的时候,浏览器可以安排它。

(如果你正在运行一个连续的动画,不只是在响应用户的输入。然后跳过scheduledmarkDirty部分我的例子,只是内draw调用requestAnimationFrame(draw);从。)

+0

我不有动画,只是从我的第三方鼠标拖动事件监听器。现在,而不是直接调用绘图方法,我现在使用计划绘制,因为你问。与我的方式相比,我得到了更好的结果(谢谢),但图像在光标后仍然稍微运行。有没有其他方法? – 2014-11-24 09:26:51

+0

@RazizaO我没有更多的想法。我建议你编辑你的问题,以包含你的程序*的缩减版本,它在运行*时演示问题。这将大大帮助回答者诊断问题。 – 2014-11-24 15:06:55