mirror of https://github.com/mgba-emu/mgba.git
Qt: Attempt to fix DisplayGL crash
This commit is contained in:
parent
8fabac962e
commit
6d40d174a8
1
CHANGES
1
CHANGES
|
@ -25,6 +25,7 @@ Other fixes:
|
|||
- Qt: Fix file handle leak on opening an invalid ROM
|
||||
- Qt: Fix Italian RTC translation (fixes mgba.io/i/1798)
|
||||
- Qt: Add missing option for Wisdom Tree in overrides list
|
||||
- Qt: Fix stability regression on AMD drivers (fixes mgba.io/i/1791)
|
||||
- Util: Fix crash if PNG header fails to write
|
||||
- Wii: Fix pixelated filtering on interframe blending (fixes mgba.io/i/1830)
|
||||
Misc:
|
||||
|
|
|
@ -484,8 +484,6 @@ void PainterGL::performDraw() {
|
|||
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_painter.endNativePainting();
|
||||
|
@ -495,7 +493,7 @@ void PainterGL::performDraw() {
|
|||
}
|
||||
|
||||
void PainterGL::enqueue(const uint32_t* backing) {
|
||||
m_mutex.lock();
|
||||
QMutexLocker locker(&m_mutex);
|
||||
uint32_t* buffer = nullptr;
|
||||
if (backing) {
|
||||
if (m_free.isEmpty()) {
|
||||
|
@ -503,17 +501,17 @@ void PainterGL::enqueue(const uint32_t* backing) {
|
|||
} else {
|
||||
buffer = m_free.takeLast();
|
||||
}
|
||||
if (buffer) {
|
||||
QSize size = m_context->screenDimensions();
|
||||
memcpy(buffer, backing, size.width() * size.height() * BYTES_PER_PIXEL);
|
||||
}
|
||||
}
|
||||
m_queue.enqueue(buffer);
|
||||
m_mutex.unlock();
|
||||
}
|
||||
|
||||
void PainterGL::dequeue() {
|
||||
m_mutex.lock();
|
||||
QMutexLocker locker(&m_mutex);
|
||||
if (m_queue.isEmpty()) {
|
||||
m_mutex.unlock();
|
||||
return;
|
||||
}
|
||||
uint32_t* buffer = m_queue.dequeue();
|
||||
|
@ -521,11 +519,8 @@ void PainterGL::dequeue() {
|
|||
m_free.append(m_buffer);
|
||||
m_buffer = nullptr;
|
||||
}
|
||||
if (buffer) {
|
||||
m_buffer = buffer;
|
||||
}
|
||||
m_mutex.unlock();
|
||||
}
|
||||
|
||||
void PainterGL::dequeueAll() {
|
||||
uint32_t* buffer = 0;
|
||||
|
|
Loading…
Reference in New Issue