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 file handle leak on opening an invalid ROM
|
||||||
- Qt: Fix Italian RTC translation (fixes mgba.io/i/1798)
|
- Qt: Fix Italian RTC translation (fixes mgba.io/i/1798)
|
||||||
- Qt: Add missing option for Wisdom Tree in overrides list
|
- 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
|
- Util: Fix crash if PNG header fails to write
|
||||||
- Wii: Fix pixelated filtering on interframe blending (fixes mgba.io/i/1830)
|
- Wii: Fix pixelated filtering on interframe blending (fixes mgba.io/i/1830)
|
||||||
Misc:
|
Misc:
|
||||||
|
|
|
@ -484,8 +484,6 @@ void PainterGL::performDraw() {
|
||||||
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) {
|
if (m_buffer) {
|
||||||
m_backend->postFrame(m_backend, 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();
|
||||||
|
@ -495,7 +493,7 @@ void PainterGL::performDraw() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void PainterGL::enqueue(const uint32_t* backing) {
|
void PainterGL::enqueue(const uint32_t* backing) {
|
||||||
m_mutex.lock();
|
QMutexLocker locker(&m_mutex);
|
||||||
uint32_t* buffer = nullptr;
|
uint32_t* buffer = nullptr;
|
||||||
if (backing) {
|
if (backing) {
|
||||||
if (m_free.isEmpty()) {
|
if (m_free.isEmpty()) {
|
||||||
|
@ -503,17 +501,17 @@ void PainterGL::enqueue(const uint32_t* backing) {
|
||||||
} else {
|
} else {
|
||||||
buffer = m_free.takeLast();
|
buffer = m_free.takeLast();
|
||||||
}
|
}
|
||||||
QSize size = m_context->screenDimensions();
|
if (buffer) {
|
||||||
memcpy(buffer, backing, size.width() * size.height() * BYTES_PER_PIXEL);
|
QSize size = m_context->screenDimensions();
|
||||||
|
memcpy(buffer, backing, size.width() * size.height() * BYTES_PER_PIXEL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
m_queue.enqueue(buffer);
|
m_queue.enqueue(buffer);
|
||||||
m_mutex.unlock();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PainterGL::dequeue() {
|
void PainterGL::dequeue() {
|
||||||
m_mutex.lock();
|
QMutexLocker locker(&m_mutex);
|
||||||
if (m_queue.isEmpty()) {
|
if (m_queue.isEmpty()) {
|
||||||
m_mutex.unlock();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
uint32_t* buffer = m_queue.dequeue();
|
uint32_t* buffer = m_queue.dequeue();
|
||||||
|
@ -521,10 +519,7 @@ void PainterGL::dequeue() {
|
||||||
m_free.append(m_buffer);
|
m_free.append(m_buffer);
|
||||||
m_buffer = nullptr;
|
m_buffer = nullptr;
|
||||||
}
|
}
|
||||||
if (buffer) {
|
m_buffer = buffer;
|
||||||
m_buffer = buffer;
|
|
||||||
}
|
|
||||||
m_mutex.unlock();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PainterGL::dequeueAll() {
|
void PainterGL::dequeueAll() {
|
||||||
|
|
Loading…
Reference in New Issue