[英]Qt 5.1.1 and OpenGL - rendering speed
我基於以下Qt類創建了我的OpenGL應用程序:QWindow,QOpenGLContext,QOpenGLFunctions_4_3_Core。 我使用QTimer渲染場景:
QTimer* timer = new QTimer( this );
connect( timer, SIGNAL( timeout() ), this, SLOT( renderScene() ) );
timer->start( ms );
當ms = 0時,我可以檢查最大FPS。 結果是~2200 fps(v-sync off)但是當我想用鼠標調整窗口大小時,程序會掛起。 然后我必須使用“ctrl + alt + del”並手動終止進程(調試器不包含任何消息)。 可能有什么問題?
我也想知道為什么當定時器間隔設置為1(應該是1000 fps)時我得到64 fps。 其他結果:interval = 10也是64 fps,interval = 50 - > 16 fps,interval = 100 - > 9 fps。 只有最后的結果(100毫秒 - > 9fps)似乎是正確的。 如何解釋這些結果?
鑒於您使用關閉程序,我假設您在Windows上
ctrl+ alt + del
當ms = 0
您確實在盡可能快地測量處理renderScene()
的性能。 當Qtimer超時時,它會排隊QTimerEvent
。 您的計時器保持超時並排隊QTimerEvent
並充斥事件隊列。 當您調整窗口大小時,會在隊列中放置一個resize事件,其中包含計時器事件,並且只會在這些事件之后處理。 由於應用程序未及時處理事件,因此應用程序似乎沒有響應
當ms != 0
您的測量值不准確,因為操作系統計時器不准確。 當我開發一個多平台播放器時,我注意到在我的窗口上任何時間從1毫秒到15毫秒的延遲大約是15毫秒 , 這可以直接測試 。 如果你在linux上運行相同的測試,你會看到1ms的fps比10ms更好(仍然不能保證1ms的分辨率)
所以結束:
編輯: ms != 0
上述參數對Qt 4.8有效,對Qt 5中的默認TimerType
( Qt::CoarseTimer
)有效。您可以使用setTimerType(Qt::PreciseTimer)
達到毫秒精度,但不保證成功 :
在Windows上,Qt將使用Windows的多媒體計時器工具(如果可用)用於Qt :: PreciseTimer,而正常的Windows計時器用於Qt :: CoarseTimer和Qt :: VeryCoarseTimer。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.