2011-09-10 60 views
2

OpenGL實際上什麼時候繪製東西我指示它?它是在調用特定的繪圖函數還是在緩衝區交換?
我想知道這個,看看我可以做這樣的事情:OpenGL繪圖時間

SomeTimer Timer; 

Timer.Start(); 
glDrawArrays(...); 
long time = Timer.Stop(); 

要查看圖紙花費最多時間並優化基於這一點。
如果很重要:我只在2D中繪製,沒有模板/深度或任何其他緩衝區測試。

回答

2

該代碼不起作用。根據定義,OpenGL命令被假定爲行爲異步。 GL命令必須在完成之前完全寫入或讀取任何參數。但除此之外,所有投注都關閉。

定時任何個人glDraw*調用只會告訴您該函數調用需要多少時間才能完成。它沒有說明渲染需要多長時間才能完成。

A more thorough discussion of this subject is available

好處是你可以時間渲染,但你必須做到OpenGL的方式。 ARB_timer_query可以讓你做到這一點:時間需要多長時間才能完成OpenGL命令到完成,而不僅僅是OpenGL。這個擴展是OpenGL 3.3的核心,它在各種級別的硬件中都有相當廣泛的應用。幾乎任何GPU仍然由它的擁有者支持實現這一點。