Qt: More Windows frame-pacing fixes

This commit is contained in:
Vicki Pfau 2022-07-04 21:30:14 -07:00
parent 38ae69d54d
commit 5b3fea3038
2 changed files with 8 additions and 3 deletions

View File

@ -644,6 +644,9 @@ void PainterGL::draw() {
if (!mCoreSyncWaitFrameStart(sync)) {
mCoreSyncWaitFrameEnd(sync);
if (m_timerResidue > targetNsec) {
m_timerResidue %= targetNsec;
}
if (!sync->audioWait && !sync->videoFrameWait) {
return;
}
@ -655,13 +658,13 @@ void PainterGL::draw() {
dequeue();
bool forceRedraw = !m_videoProxy;
if (sync->audioWait || sync->videoFrameWait) {
while (delay + m_delayTimer.nsecsElapsed() + OVERHEAD_NSEC < targetNsec) {
while (delay + m_overage + m_delayTimer.nsecsElapsed() + OVERHEAD_NSEC < targetNsec) {
QThread::usleep(200);
}
forceRedraw = sync->videoFrameWait;
}
if (!forceRedraw) {
forceRedraw = delay + m_delayTimer.nsecsElapsed() + OVERHEAD_NSEC >= refreshNsec;
forceRedraw = delay + m_overage + m_delayTimer.nsecsElapsed() + OVERHEAD_NSEC >= refreshNsec;
}
mCoreSyncWaitFrameEnd(sync);
@ -670,7 +673,8 @@ void PainterGL::draw() {
m_delayTimer.restart();
delay -= targetNsec;
m_timerResidue = (m_timerResidue + delay) / 2;
m_overage = (m_overage + delay) / 2;
m_timerResidue = delay;
if (m_timerResidue > refreshNsec) {
if (!m_drawTimer.isActive()) {

View File

@ -196,6 +196,7 @@ private:
bool m_started = false;
QTimer m_drawTimer;
qint64 m_timerResidue;
qint64 m_overage;
std::shared_ptr<CoreController> m_context;
CoreController::Interrupter m_interrupter;
bool m_supportsShaders;