mirror of https://github.com/mgba-emu/mgba.git
Qt: Defer texture updates until frame is drawn (fixes #1590)
This commit is contained in:
parent
addb7c6114
commit
b4cd441ef4
1
CHANGES
1
CHANGES
|
@ -24,6 +24,7 @@ Misc:
|
||||||
- Qt: Add hex index to palette view
|
- Qt: Add hex index to palette view
|
||||||
- Qt: Add transformation matrix info to sprite view
|
- Qt: Add transformation matrix info to sprite view
|
||||||
- Qt: Disable Replace ROM option when no game loaded
|
- Qt: Disable Replace ROM option when no game loaded
|
||||||
|
- Qt: Defer texture updates until frame is drawn (fixes mgba.io/i/1590)
|
||||||
|
|
||||||
0.8.1: (2020-02-16)
|
0.8.1: (2020-02-16)
|
||||||
Emulation fixes:
|
Emulation fixes:
|
||||||
|
|
|
@ -327,7 +327,7 @@ PainterGL::PainterGL(QWindow* surface, QOpenGLContext* parent, int forceVersion)
|
||||||
m_backend->lockAspectRatio = false;
|
m_backend->lockAspectRatio = false;
|
||||||
m_backend->interframeBlending = false;
|
m_backend->interframeBlending = false;
|
||||||
|
|
||||||
for (int i = 0; i < 2; ++i) {
|
for (int i = 0; i < 3; ++i) {
|
||||||
m_free.append(new uint32_t[1024 * 2048]);
|
m_free.append(new uint32_t[1024 * 2048]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -423,6 +423,7 @@ void PainterGL::start() {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
m_buffer = nullptr;
|
||||||
m_active = true;
|
m_active = true;
|
||||||
m_started = true;
|
m_started = true;
|
||||||
}
|
}
|
||||||
|
@ -490,6 +491,11 @@ void PainterGL::performDraw() {
|
||||||
m_painter.beginNativePainting();
|
m_painter.beginNativePainting();
|
||||||
float r = m_surface->devicePixelRatio();
|
float r = m_surface->devicePixelRatio();
|
||||||
m_backend->resized(m_backend, m_size.width() * r, m_size.height() * r);
|
m_backend->resized(m_backend, m_size.width() * r, m_size.height() * r);
|
||||||
|
if (m_buffer) {
|
||||||
|
m_backend->postFrame(m_backend, m_buffer);
|
||||||
|
m_free.append(m_buffer);
|
||||||
|
m_buffer = nullptr;
|
||||||
|
}
|
||||||
m_backend->drawFrame(m_backend);
|
m_backend->drawFrame(m_backend);
|
||||||
m_painter.endNativePainting();
|
m_painter.endNativePainting();
|
||||||
if (m_showOSD && m_messagePainter) {
|
if (m_showOSD && m_messagePainter) {
|
||||||
|
@ -520,9 +526,12 @@ void PainterGL::dequeue() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
uint32_t* buffer = m_queue.dequeue();
|
uint32_t* buffer = m_queue.dequeue();
|
||||||
|
if (m_buffer) {
|
||||||
|
m_free.append(m_buffer);
|
||||||
|
m_buffer = nullptr;
|
||||||
|
}
|
||||||
if (buffer) {
|
if (buffer) {
|
||||||
m_backend->postFrame(m_backend, buffer);
|
m_buffer = buffer;
|
||||||
m_free.append(buffer);
|
|
||||||
}
|
}
|
||||||
m_mutex.unlock();
|
m_mutex.unlock();
|
||||||
}
|
}
|
||||||
|
@ -539,6 +548,10 @@ void PainterGL::dequeueAll() {
|
||||||
if (buffer) {
|
if (buffer) {
|
||||||
m_backend->postFrame(m_backend, buffer);
|
m_backend->postFrame(m_backend, buffer);
|
||||||
}
|
}
|
||||||
|
if (m_buffer) {
|
||||||
|
m_free.append(m_buffer);
|
||||||
|
m_buffer = nullptr;
|
||||||
|
}
|
||||||
m_mutex.unlock();
|
m_mutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -121,6 +121,7 @@ private:
|
||||||
|
|
||||||
QList<uint32_t*> m_free;
|
QList<uint32_t*> m_free;
|
||||||
QQueue<uint32_t*> m_queue;
|
QQueue<uint32_t*> m_queue;
|
||||||
|
uint32_t* m_buffer;
|
||||||
QPainter m_painter;
|
QPainter m_painter;
|
||||||
QMutex m_mutex;
|
QMutex m_mutex;
|
||||||
QWindow* m_surface;
|
QWindow* m_surface;
|
||||||
|
|
Loading…
Reference in New Issue