2015-03-13 74 views
1

我已經有了一個WebGL場景,並且我可以使用一組參數來平衡渲染質量和速度。只要幀速率沒有降低到某個閾值以下,我就會盡可能提高質量,從而向用戶展示場景。爲了實現這一點,我必須以某種方式測量「當前」幀速率以響應質量變化。測量渲染時間

但是,只要用戶不與其交互(如使用鼠標旋轉相機),場景就是靜態的。即使沒有任何變化,我也不想讓循環重新渲染同一場景。如果場景停止移動,我想停止渲染。這意味着我不能簡單地平均連續幀之間的時間,因爲我無法區分呈現器緩慢和用戶只是更慢地移動鼠標。

我想過在啓動時多次渲染場景,並從中判斷幀速率。但是由於場景的一部分可以從當前相機位置看到,或者由於用戶在畫布外進行交互,場景的複雜性可能會隨時間而改變。所以當場景改變時,我必須調整質量。在每次鼠標釋放之後運行校準循環可能是一種選擇。

我也想過使用finish而不是flush調用來準確測量渲染時間。但是當我等待GL完成渲染時,我的應用程序基本上無響應,特別是無法排隊鼠標事件。由於我設想渲染理想地在兩幀之間以目標閾值幀速率佔據所有時間,所以這可能是相當糟糕的。我只能在某些場合使用finish而不是flush,就像在鼠標釋放之後一樣。

什麼是在WebGL應用程序中實現所需幀速率或定期測量渲染時間的最佳方法?

+1

僅供參考:[完成只是在chrome中刷新](http://stackoverflow.com/a/20810521/128511)。 – gman 2015-03-14 08:12:23

+0

@gman:有一個想法...非常感謝那篇文章! – MvG 2015-03-14 14:34:02

回答

1

爲什麼你不能使用平均渲染時間?

僅僅因爲您渲染次數較少,並不意味着您無法平均渲染時間。得到一個準確的平均值需要更長的時間。

一旦用戶開始移動鼠標,您將獲得大量數據,並且無論如何應該很快爲您提供平均渲染速率。

+0

無論何時我開始渲染,我都可以獲取時間戳,但是我無法訪問完成時的時間。所以比較一個開始時間和下一個開始時間並不告訴我任何事情,如果渲染時間不是限制因素,但鼠標速度是。 – MvG 2015-03-14 14:31:23

+0

你是什麼意思,你沒有訪問? – 2015-03-14 23:20:24

+0

有一個afaik沒有回調或類似的通知我的JavaScript代碼,渲染已完成。當我調用'flush'(或根據gman的評論,甚至'finish')時* *不是*渲染完成的時間,而只是所有渲染指令已傳遞的時間。之後,渲染通常還需要更多時間。 – MvG 2015-03-15 09:42:38