2017-09-03 134 views
0

OpenGl(在android下如果是問題)確實vsync信號絕對固定在每16.6毫秒的間隔,不能波動或在某些情況下可能有點「可移動」?是否修正了opengl vsync或者它可能會波動?

我的意思是,它必須得到絕對是這樣的:

16.6ms --- 16.6ms --- 16.6ms ---等

或者會不會是這樣?:

16.6ms - 時間18ms --- 16.6ms --- 15毫秒---等等

我問這是因爲在每個eglswapBuffers之間我有15ms,18ms,22ms等奇怪的值......我不明白爲什麼。

這是durring動畫每個eglswapbuffers之間的延遲我有(毫秒):

| 10 | 13 | 16 | 24 | 17 | 10 | 17 | 17 | 17 | 16 | 17 | 19 | 15 | 17 | 17 | 18 | 16 | 16 | 17 | 17 | 17 | 17 | 17 | 17 | 17 | 17 | 17 | 18 | 16 | 16 | 17 | 17 | 17 | 18 | 16 | 15 | 17 | 17 | 17 | 27 | 20 | 20 | 15 | 14 | 14 | 17 | 10 | 11 | 17 | 17 | 20 | 19 | 14 | 14 | 17 | 17 | 17 | 44 | 27 | 13 | 18 | 14 | 16 | 17 | 21 | 17 | 11 | 17 | 17 | 17 | 17 | 17 | 17 | 17 | 17 | 18 | 15 | 17 | 17 | 18 | 16 | 17 | 17 | 17 | 17 | 17 | 17 | 16 | 21 | 12 | 17 | 17 | 16 | 18 | 20 | 18 | 13 | 15 | 21 | 14 | 21 | 24 | 24 | 20 | 7 | 7 | 14 | 17 | 17 | 17 | 17 | 17 | 17 | 17 | 18 | 21 | 24 | 19 | 21 | 16 | 10 | 10 | 12 | 16 | 17 | 17 | 18 | 16 | 17 | 17 | 16 | 17 | 17 | 17 | 18 | 19 | 18 | 12 | 15 | 16 | 17 | 17 | 17 | 23 | 13 | 16 | 23 | 13 | 14 | 16 | 17 | 17 | 18 | 16 | 19 | 15 | 21 | 17 | 13 | 16 | 17 | 17 | 17 | 17 | 18 | 24 | 18 | 11 | 11 | 26 | 19 | 19 | 12 | 17 | 14 | 8 | 14 | 17 | 17 | 17 |

+2

你如何衡量價值? – Robinson

+0

@Robinson與每個eglswapBuffers之間的計時器 – andrey

+0

什麼樣的計時器?點是定時器分辨率可能>您的約束,即它不能保證是正確的。這將代表不同的時代。 – Robinson

回答

2

調用eglSwapBuffers實際上並不交換緩衝區;它只是一個異步信號,告訴驅動程序堆棧應用程序已完成組成當前幀。實際的顯示交換可能會在一段時間後發生,所以交換之間的時間量可能會有點變化,特別是如果您有其他線程正在運行,可能會在應用程序線程重新計劃時增加抖動。

準確的vsync性能取決於顯示面板;它通常是16.6ms(60 FPS),但是YMMV,特別是在桌面上使用g-sync(基本上是動態可變的vsync)技術。

+0

是的,但如果它是異步的,爲什麼它總是等待大約16毫秒?有時候更多,更少?因爲如果它是異步的,它必須返回imediatly?如果它真的是異步如何檢測幀被丟棄? – andrey

+0

「如何檢測出一個框架被丟棄」 - 你不能,它完全取決於顯示子系統,你將無法看到。 – solidpixel

+0

我的問題是,如果eglswapBuffers不規則,我該如何平滑滾動?因爲我每16ms計算一次滾動的新位置,但是如果某些時候eglswapBuffers需要22s,14s等等才能返回,那麼我的滾動將不會再完美平滑了:(即使在內部我也會看起來像50fps沒有任何框架下降:( – andrey

相關問題