summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBe <be@mixxx.org>2020-12-07 01:37:57 -0600
committerBe <be@mixxx.org>2020-12-07 01:37:57 -0600
commit059771199390113c5c1cf385ef586f7dd6320b3c (patch)
treebabe64a39b63ac830d58f1411bdd666bb3280d01 /src
parent2a3e501f54403d89282bd3b4b250830c3efb5516 (diff)
hack around QGLWidget::initializeGL not working on macOS
Diffstat (limited to 'src')
-rw-r--r--src/waveform/renderers/glslwaveformrenderersignal.cpp6
-rw-r--r--src/waveform/renderers/glvsynctestrenderer.cpp1
-rw-r--r--src/waveform/renderers/glwaveformrendererfilteredsignal.cpp1
-rw-r--r--src/waveform/renderers/glwaveformrendererrgb.cpp2
-rw-r--r--src/waveform/renderers/glwaveformrenderersimplesignal.cpp2
-rw-r--r--src/waveform/renderers/waveformrendererabstract.h15
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