2014-11-23 40 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