mirror of https://github.com/mgba-emu/mgba.git
Qt: More Windows frame-pacing fixes
This commit is contained in:
parent
38ae69d54d
commit
5b3fea3038
|
@ -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()) {
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue