簡體   English   中英

Qt 5.1.1和OpenGL - 渲染速度

[英]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的分辨率)

所以結束:

  • 測試結果的差異與Open-GL無關
  • 測試結果的差異與Windows有很大關系
  • OS和OS版本的時序差異是使外部設備生成時間碼的充分理由
  • 如果在實際程序中需要零延遲計時器(並且很可能),則需要在與主事件隊列不同的事件隊列中操作。

編輯: ms != 0上述參數對Qt 4.8有效,對Qt 5中的默認TimerTypeQt::CoarseTimer )有效。您可以使用setTimerType(Qt::PreciseTimer)達到毫秒精度,但不保證成功

在Windows上,Qt將使用Windows的多媒體計時器工具(如果可用)用於Qt :: PreciseTimer,而正常的Windows計時器用於Qt :: CoarseTimer和Qt :: VeryCoarseTimer。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM