diff options
author | Be <be@mixxx.org> | 2020-12-07 01:37:57 -0600 |
---|---|---|
committer | Be <be@mixxx.org> | 2020-12-07 01:37:57 -0600 |
commit | 059771199390113c5c1cf385ef586f7dd6320b3c (patch) | |
tree | babe64a39b63ac830d58f1411bdd666bb3280d01 /src | |
parent | 2a3e501f54403d89282bd3b4b250830c3efb5516 (diff) |
hack around QGLWidget::initializeGL not working on macOS
Diffstat (limited to 'src')
6 files changed, 23 insertions, 4 deletions
diff --git a/src/waveform/renderers/glslwaveformrenderersignal.cpp b/src/waveform/renderers/glslwaveformrenderersignal.cpp index bdab25207a..10e0ed82c1 100644 --- a/src/waveform/renderers/glslwaveformrenderersignal.cpp +++ b/src/waveform/renderers/glslwaveformrenderersignal.cpp @@ -254,10 +254,6 @@ void GLSLWaveformRendererSignal::slotWaveformUpdated() { } void GLSLWaveformRendererSignal::draw(QPainter* painter, QPaintEvent* /*event*/) { - if (!m_framebuffer || !m_framebuffer->isValid() || !m_shadersValid) { - return; - } - TrackPointer trackInfo = m_waveformRenderer->getTrackInfo(); if (!trackInfo) { return; @@ -278,6 +274,8 @@ void GLSLWaveformRendererSignal::draw(QPainter* painter, QPaintEvent* /*event*/) return; } + maybeInitializeGL(); + // save the GL state set for QPainter painter->beginNativePainting(); diff --git a/src/waveform/renderers/glvsynctestrenderer.cpp b/src/waveform/renderers/glvsynctestrenderer.cpp index cad6a2205d..6cbc85b454 100644 --- a/src/waveform/renderers/glvsynctestrenderer.cpp +++ b/src/waveform/renderers/glvsynctestrenderer.cpp @@ -26,6 +26,7 @@ inline void setPoint(QPointF& point, qreal x, qreal y) { } void GLVSyncTestRenderer::draw(QPainter* painter, QPaintEvent* /*event*/) { + maybeInitializeGL(); PerformanceTimer timer; //mixxx::Duration t5, t6, t7, t8, t9, t10, t11, t12, t13; diff --git a/src/waveform/renderers/glwaveformrendererfilteredsignal.cpp b/src/waveform/renderers/glwaveformrendererfilteredsignal.cpp index 9043ee5262..0ad618c0bd 100644 --- a/src/waveform/renderers/glwaveformrendererfilteredsignal.cpp +++ b/src/waveform/renderers/glwaveformrendererfilteredsignal.cpp @@ -23,6 +23,7 @@ void GLWaveformRendererFilteredSignal::onSetup(const QDomNode& /*node*/) { } void GLWaveformRendererFilteredSignal::draw(QPainter* painter, QPaintEvent* /*event*/) { + maybeInitializeGL(); TrackPointer pTrack = m_waveformRenderer->getTrackInfo(); if (!pTrack) { diff --git a/src/waveform/renderers/glwaveformrendererrgb.cpp b/src/waveform/renderers/glwaveformrendererrgb.cpp index 50ac786781..708a139a43 100644 --- a/src/waveform/renderers/glwaveformrendererrgb.cpp +++ b/src/waveform/renderers/glwaveformrendererrgb.cpp @@ -25,6 +25,8 @@ void GLWaveformRendererRGB::onSetup(const QDomNode& /* node */) { } void GLWaveformRendererRGB::draw(QPainter* painter, QPaintEvent* /*event*/) { + maybeInitializeGL(); + TrackPointer pTrack = m_waveformRenderer->getTrackInfo(); if (!pTrack) { return; diff --git a/src/waveform/renderers/glwaveformrenderersimplesignal.cpp b/src/waveform/renderers/glwaveformrenderersimplesignal.cpp index 56d9f5448e..041353ff7c 100644 --- a/src/waveform/renderers/glwaveformrenderersimplesignal.cpp +++ b/src/waveform/renderers/glwaveformrenderersimplesignal.cpp @@ -25,6 +25,8 @@ inline void setPoint(QPointF& point, qreal x, qreal y) { } void GLWaveformRendererSimpleSignal::draw(QPainter* painter, QPaintEvent* /*event*/) { + maybeInitializeGL(); + TrackPointer pTrack = m_waveformRenderer->getTrackInfo(); if (!pTrack) { return; diff --git a/src/waveform/renderers/waveformrendererabstract.h b/src/waveform/renderers/waveformrendererabstract.h index 6a1bba6f6d..9b7bcd692e 100644 --- a/src/waveform/renderers/waveformrendererabstract.h +++ b/src/waveform/renderers/waveformrendererabstract.h @@ -2,6 +2,7 @@ #define WAVEFORMRENDERERABSTRACT_H #include <QDomNode> +#include <QGLContext> #include <QOpenGLFunctions_2_1> #include <QPaintEvent> #include <QPainter> @@ -58,6 +59,20 @@ class GLWaveformRenderer : protected QOpenGLFunctions_2_1 { virtual void onInitializeGL() { initializeOpenGLFunctions(); } + + protected: + // Somehow QGLWidget does not call QGLWidget::initializeGL on macOS, so hack around that + // by calling this in `draw` when the QGLContext has been made current. + // TODO: remove this when upgrading to QOpenGLWidget + void maybeInitializeGL() { + if (QGLContext::currentContext() != m_pLastContext) { + onInitializeGL(); + m_pLastContext = QGLContext::currentContext(); + } + } + + private: + const QGLContext* m_pLastContext; }; #endif // WAVEFORMRENDERERABSTRACT_H |