summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBe <be@mixxx.org>2020-12-10 17:13:17 -0600
committerGitHub <noreply@github.com>2020-12-10 17:13:17 -0600
commit02c0c417241750d1ba904b043059568965c915ec (patch)
treeec0f195f65ab909a51d444d4e89de22b471180bc /src
parent3b96557a796c416adb0e78114b3e22c17bd51ee8 (diff)
parentf26b7fcc07f47ae1f349f4cd2c39418675c67eee (diff)
Merge pull request #3407 from Be-ing/opengl_initialization_fix
fix initialization of QGLWidget waveform widgets & renderers
Diffstat (limited to 'src')
-rw-r--r--src/preferences/dialog/dlgprefwaveform.cpp15
-rw-r--r--src/waveform/renderers/glslwaveformrenderersignal.cpp25
-rw-r--r--src/waveform/renderers/glslwaveformrenderersignal.h9
-rw-r--r--src/waveform/renderers/glvsynctestrenderer.cpp2
-rw-r--r--src/waveform/renderers/glvsynctestrenderer.h7
-rw-r--r--src/waveform/renderers/glwaveformrendererfilteredsignal.cpp2
-rw-r--r--src/waveform/renderers/glwaveformrendererfilteredsignal.h7
-rw-r--r--src/waveform/renderers/glwaveformrendererrgb.cpp3
-rw-r--r--src/waveform/renderers/glwaveformrendererrgb.h5
-rw-r--r--src/waveform/renderers/glwaveformrenderersimplesignal.cpp3
-rw-r--r--src/waveform/renderers/glwaveformrenderersimplesignal.h6
-rw-r--r--src/waveform/renderers/waveformrendererabstract.h28
-rw-r--r--src/waveform/widgets/glrgbwaveformwidget.cpp8
-rw-r--r--src/waveform/widgets/glrgbwaveformwidget.h2
-rw-r--r--src/waveform/widgets/glsimplewaveformwidget.cpp8
-rw-r--r--src/waveform/widgets/glsimplewaveformwidget.h2
-rw-r--r--src/waveform/widgets/glslwaveformwidget.cpp7
-rw-r--r--src/waveform/widgets/glslwaveformwidget.h2
-rw-r--r--src/waveform/widgets/glwaveformwidget.cpp8
-rw-r--r--src/waveform/widgets/glwaveformwidget.h2
-rw-r--r--src/waveform/widgets/qtrgbwaveformwidget.cpp3
-rw-r--r--src/waveform/widgets/qtsimplewaveformwidget.cpp3
-rw-r--r--src/waveform/widgets/qtvsynctestwidget.cpp3
-rw-r--r--src/waveform/widgets/qtwaveformwidget.cpp3
-rw-r--r--src/waveform/widgets/waveformwidgetabstract.cpp13
-rw-r--r--src/waveform/widgets/waveformwidgetabstract.h23
26 files changed, 108 insertions, 91 deletions
diff --git a/src/preferences/dialog/dlgprefwaveform.cpp b/src/preferences/dialog/dlgprefwaveform.cpp
index 48ac7bae01..03113b816e 100644
--- a/src/preferences/dialog/dlgprefwaveform.cpp
+++ b/src/preferences/dialog/dlgprefwaveform.cpp
@@ -115,14 +115,10 @@ DlgPrefWaveform::DlgPrefWaveform(QWidget* pParent, MixxxMainWindow* pMixxx,
&WaveformWidgetFactory::waveformMeasured,
this,
&DlgPrefWaveform::slotWaveformMeasured);
- // Don't automatically reload the skin after changing the overview type to
- // work around macOS skin change crash. https://bugs.launchpad.net/mixxx/+bug/1877487
-#ifndef __APPLE__
connect(waveformOverviewComboBox,
QOverload<int>::of(&QComboBox::currentIndexChanged),
this,
&DlgPrefWaveform::slotSetWaveformOverviewType);
-#endif
connect(clearCachedWaveforms,
&QAbstractButton::clicked,
this,
@@ -182,15 +178,10 @@ void DlgPrefWaveform::slotUpdate() {
}
void DlgPrefWaveform::slotApply() {
- // Require restarting Mixxx to apply the new overview type in order to work
- // around macOS skin change crash. https://bugs.launchpad.net/mixxx/+bug/1877487
-#ifdef __APPLE__
ConfigValue overviewtype = ConfigValue(waveformOverviewComboBox->currentIndex());
if (overviewtype != m_pConfig->get(ConfigKey("[Waveform]", "WaveformOverviewType"))) {
m_pConfig->set(ConfigKey("[Waveform]", "WaveformOverviewType"), overviewtype);
- notifyRebootNecessary();
}
-#endif
WaveformSettings waveformSettings(m_pConfig);
waveformSettings.setWaveformCachingEnabled(enableWaveformCaching->isChecked());
waveformSettings.setWaveformGenerationWithAnalysisEnabled(
@@ -240,12 +231,6 @@ void DlgPrefWaveform::slotResetToDefaults() {
playMarkerPositionSlider->setValue(50);
}
-void DlgPrefWaveform::notifyRebootNecessary() {
- // make the fact that you have to restart mixxx more obvious
- QMessageBox::information(
- this, tr("Information"), tr("Mixxx must be restarted to load the new overview type."));
-}
-
void DlgPrefWaveform::slotSetFrameRate(int frameRate) {
WaveformWidgetFactory::instance()->setFrameRate(frameRate);
}
diff --git a/src/waveform/renderers/glslwaveformrenderersignal.cpp b/src/waveform/renderers/glslwaveformrenderersignal.cpp
index 0afb83a542..01d9465db1 100644
--- a/src/waveform/renderers/glslwaveformrenderersignal.cpp
+++ b/src/waveform/renderers/glslwaveformrenderersignal.cpp
@@ -19,7 +19,6 @@ GLSLWaveformRendererSignal::GLSLWaveformRendererSignal(WaveformWidgetRenderer* w
m_bDumpPng(false),
m_shadersValid(false),
m_rgbShader(rgbShader) {
- initializeOpenGLFunctions();
}
GLSLWaveformRendererSignal::~GLSLWaveformRendererSignal() {
@@ -191,7 +190,8 @@ void GLSLWaveformRendererSignal::createFrameBuffers() {
}
}
-bool GLSLWaveformRendererSignal::onInit() {
+void GLSLWaveformRendererSignal::onInitializeGL() {
+ initializeOpenGLFunctions();
m_textureRenderedWaveformCompletion = 0;
if (!m_frameShaderProgram) {
@@ -199,14 +199,13 @@ bool GLSLWaveformRendererSignal::onInit() {
}
if (!loadShaders()) {
- return false;
+ return;
}
+ createFrameBuffers();
createGeometry();
if (!loadTexture()) {
- return false;
+ return;
}
-
- return true;
}
void GLSLWaveformRendererSignal::onSetup(const QDomNode& node) {
@@ -240,19 +239,23 @@ void GLSLWaveformRendererSignal::onSetTrack() {
}
void GLSLWaveformRendererSignal::onResize() {
+ // onInitializeGL not called yet
+ if (!m_frameShaderProgram) {
+ return;
+ }
createFrameBuffers();
}
void GLSLWaveformRendererSignal::slotWaveformUpdated() {
m_textureRenderedWaveformCompletion = 0;
+ // onInitializeGL not called yet
+ if (!m_frameShaderProgram) {
+ return;
+ }
loadTexture();
}
void GLSLWaveformRendererSignal::draw(QPainter* painter, QPaintEvent* /*event*/) {
- if (!m_framebuffer || !m_framebuffer->isValid() || !m_shadersValid) {
- return;
- }
-
TrackPointer trackInfo = m_waveformRenderer->getTrackInfo();
if (!trackInfo) {
return;
@@ -273,6 +276,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/glslwaveformrenderersignal.h b/src/waveform/renderers/glslwaveformrenderersignal.h
index 8e5f3ca803..9ebfc7920d 100644
--- a/src/waveform/renderers/glslwaveformrenderersignal.h
+++ b/src/waveform/renderers/glslwaveformrenderersignal.h
@@ -1,6 +1,5 @@
#pragma once
-#include <QOpenGLFunctions_2_1>
#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2)
#include <QGLFramebufferObject>
@@ -11,17 +10,17 @@
#include "util/memory.h"
#include "waveform/renderers/waveformrenderersignalbase.h"
-class GLSLWaveformRendererSignal: public QObject,
- public WaveformRendererSignalBase,
- protected QOpenGLFunctions_2_1 {
+class GLSLWaveformRendererSignal : public QObject,
+ public WaveformRendererSignalBase,
+ public GLWaveformRenderer {
Q_OBJECT
public:
GLSLWaveformRendererSignal(WaveformWidgetRenderer* waveformWidgetRenderer,
bool rgbShader);
~GLSLWaveformRendererSignal() override;
- bool onInit() override;
void onSetup(const QDomNode& node) override;
+ void onInitializeGL() override;
void draw(QPainter* painter, QPaintEvent* event) override;
void onSetTrack() override;
diff --git a/src/waveform/renderers/glvsynctestrenderer.cpp b/src/waveform/renderers/glvsynctestrenderer.cpp
index dc5e42e966..6cbc85b454 100644
--- a/src/waveform/renderers/glvsynctestrenderer.cpp
+++ b/src/waveform/renderers/glvsynctestrenderer.cpp
@@ -11,7 +11,6 @@ GLVSyncTestRenderer::GLVSyncTestRenderer(
WaveformWidgetRenderer* waveformWidgetRenderer)
: WaveformRendererSignalBase(waveformWidgetRenderer),
m_drawcount(0) {
- initializeOpenGLFunctions();
}
GLVSyncTestRenderer::~GLVSyncTestRenderer() {
@@ -27,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/glvsynctestrenderer.h b/src/waveform/renderers/glvsynctestrenderer.h
index b9a31049eb..a74ef88e64 100644
--- a/src/waveform/renderers/glvsynctestrenderer.h
+++ b/src/waveform/renderers/glvsynctestrenderer.h
@@ -1,15 +1,14 @@
#pragma once
-#include <QOpenGLFunctions_2_1>
#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2)
#include "waveformrenderersignalbase.h"
class ControlObject;
-class GLVSyncTestRenderer: public WaveformRendererSignalBase,
- protected QOpenGLFunctions_2_1 {
-public:
+class GLVSyncTestRenderer : public WaveformRendererSignalBase,
+ public GLWaveformRenderer {
+ public:
explicit GLVSyncTestRenderer(
WaveformWidgetRenderer* waveformWidgetRenderer);
virtual ~GLVSyncTestRenderer();
diff --git a/src/waveform/renderers/glwaveformrendererfilteredsignal.cpp b/src/waveform/renderers/glwaveformrendererfilteredsignal.cpp
index 8cb59e1e40..0ad618c0bd 100644
--- a/src/waveform/renderers/glwaveformrendererfilteredsignal.cpp
+++ b/src/waveform/renderers/glwaveformrendererfilteredsignal.cpp
@@ -12,7 +12,6 @@
GLWaveformRendererFilteredSignal::GLWaveformRendererFilteredSignal(
WaveformWidgetRenderer* waveformWidgetRenderer)
: WaveformRendererSignalBase(waveformWidgetRenderer) {
- initializeOpenGLFunctions();
}
GLWaveformRendererFilteredSignal::~GLWaveformRendererFilteredSignal() {
@@ -24,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/glwaveformrendererfilteredsignal.h b/src/waveform/renderers/glwaveformrendererfilteredsignal.h
index 807ee928ea..be4b30780b 100644
--- a/src/waveform/renderers/glwaveformrendererfilteredsignal.h
+++ b/src/waveform/renderers/glwaveformrendererfilteredsignal.h
@@ -1,6 +1,5 @@
#pragma once
-#include <QOpenGLFunctions_2_1>
#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2)
#include <QDomNode>
@@ -9,9 +8,9 @@
class ControlObject;
-class GLWaveformRendererFilteredSignal: public WaveformRendererSignalBase,
- protected QOpenGLFunctions_2_1 {
-public:
+class GLWaveformRendererFilteredSignal : public WaveformRendererSignalBase,
+ public GLWaveformRenderer {
+ public:
explicit GLWaveformRendererFilteredSignal(
WaveformWidgetRenderer* waveformWidgetRenderer);
virtual ~GLWaveformRendererFilteredSignal();
diff --git a/src/waveform/renderers/glwaveformrendererrgb.cpp b/src/waveform/renderers/glwaveformrendererrgb.cpp
index 8bfac3f5f4..708a139a43 100644
--- a/src/waveform/renderers/glwaveformrendererrgb.cpp
+++ b/src/waveform/renderers/glwaveformrendererrgb.cpp
@@ -16,7 +16,6 @@ const float kHeightScaleFactor = 255.0f / sqrtf(255 * 255 * 3);
GLWaveformRendererRGB::GLWaveformRendererRGB(
WaveformWidgetRenderer* waveformWidgetRenderer)
: WaveformRendererSignalBase(waveformWidgetRenderer) {
- initializeOpenGLFunctions();
}
GLWaveformRendererRGB::~GLWaveformRendererRGB() {
@@ -26,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/glwaveformrendererrgb.h b/src/waveform/renderers/glwaveformrendererrgb.h
index 4b435d6746..8bbfd7fd93 100644
--- a/src/waveform/renderers/glwaveformrendererrgb.h
+++ b/src/waveform/renderers/glwaveformrendererrgb.h
@@ -1,14 +1,13 @@
#pragma once
-#include <QOpenGLFunctions_2_1>
#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2)
#include "waveformrenderersignalbase.h"
class ControlObject;
-class GLWaveformRendererRGB: public WaveformRendererSignalBase,
- protected QOpenGLFunctions_2_1 {
+class GLWaveformRendererRGB : public WaveformRendererSignalBase,
+ public GLWaveformRenderer {
public:
explicit GLWaveformRendererRGB(
WaveformWidgetRenderer* waveformWidgetRenderer);
diff --git a/src/waveform/renderers/glwaveformrenderersimplesignal.cpp b/src/waveform/renderers/glwaveformrenderersimplesignal.cpp
index d9651356bf..041353ff7c 100644
--- a/src/waveform/renderers/glwaveformrenderersimplesignal.cpp
+++ b/src/waveform/renderers/glwaveformrenderersimplesignal.cpp
@@ -10,7 +10,6 @@
GLWaveformRendererSimpleSignal::GLWaveformRendererSimpleSignal(
WaveformWidgetRenderer* waveformWidgetRenderer)
: WaveformRendererSignalBase(waveformWidgetRenderer) {
- initializeOpenGLFunctions();
}
GLWaveformRendererSimpleSignal::~GLWaveformRendererSimpleSignal() {
@@ -26,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/glwaveformrenderersimplesignal.h b/src/waveform/renderers/glwaveformrenderersimplesignal.h
index 48e698803d..ae3aae6111 100644
--- a/src/waveform/renderers/glwaveformrenderersimplesignal.h
+++ b/src/waveform/renderers/glwaveformrenderersimplesignal.h
@@ -1,14 +1,14 @@
#pragma once
-#include <QOpenGLFunctions_2_1>
#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2)
#include "waveformrenderersignalbase.h"
class ControlObject;
-class GLWaveformRendererSimpleSignal : public WaveformRendererSignalBase, protected QOpenGLFunctions_2_1 {
-public:
+class GLWaveformRendererSimpleSignal : public WaveformRendererSignalBase,
+ public GLWaveformRenderer {
+ public:
explicit GLWaveformRendererSimpleSignal(WaveformWidgetRenderer* waveformWidgetRenderer);
virtual ~GLWaveformRendererSimpleSignal();
diff --git a/src/waveform/renderers/waveformrendererabstract.h b/src/waveform/renderers/waveformrendererabstract.h
index a1856e70f2..9ccbfaa70d 100644
--- a/src/waveform/renderers/waveformrendererabstract.h
+++ b/src/waveform/renderers/waveformrendererabstract.h
@@ -1,6 +1,8 @@
#pragma once
#include <QDomNode>
+#include <QGLContext>
+#include <QOpenGLFunctions_2_1>
#include <QPaintEvent>
#include <QPainter>
@@ -45,3 +47,29 @@ class WaveformRendererAbstract {
friend class WaveformWidgetRenderer;
};
+
+/// GLWaveformRenderer is a WaveformRendererAbstract which directly calls OpenGL functions.
+///
+/// Note that the Qt OpenGL WaveformRendererAbstracts are not GLWaveformRenderers because
+/// they do not call OpenGL functions directly. Instead, they inherit QGLWidget and use the
+/// QPainter API which Qt translates to OpenGL under the hood.
+class GLWaveformRenderer : protected QOpenGLFunctions_2_1 {
+ public:
+ 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;
+};
diff --git a/src/waveform/widgets/glrgbwaveformwidget.cpp b/src/waveform/widgets/glrgbwaveformwidget.cpp
index 40b54b4903..c483eca3d5 100644
--- a/src/waveform/widgets/glrgbwaveformwidget.cpp
+++ b/src/waveform/widgets/glrgbwaveformwidget.cpp
@@ -13,21 +13,17 @@
#include "waveform/sharedglcontext.h"
GLRGBWaveformWidget::GLRGBWaveformWidget(const QString& group, QWidget* parent)
- : QGLWidget(parent, SharedGLContext::getWidget()),
- WaveformWidgetAbstract(group) {
+ : GLWaveformWidgetAbstract(group, parent) {
qDebug() << "Created QGLWidget. Context"
<< "Valid:" << context()->isValid()
<< "Sharing:" << context()->isSharing();
- if (QGLContext::currentContext() != context()) {
- makeCurrent();
- }
addRenderer<WaveformRenderBackground>();
addRenderer<WaveformRendererEndOfTrack>();
addRenderer<WaveformRendererPreroll>();
addRenderer<WaveformRenderMarkRange>();
#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2)
- addRenderer<GLWaveformRendererRGB>();
+ m_pGlRenderer = addRenderer<GLWaveformRendererRGB>();
#endif // !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2)
addRenderer<WaveformRenderBeat>();
addRenderer<WaveformRenderMark>();
diff --git a/src/waveform/widgets/glrgbwaveformwidget.h b/src/waveform/widgets/glrgbwaveformwidget.h
index 8d6391ad79..bfd8cda72f 100644
--- a/src/waveform/widgets/glrgbwaveformwidget.h
+++ b/src/waveform/widgets/glrgbwaveformwidget.h
@@ -4,7 +4,7 @@
#include "waveformwidgetabstract.h"
-class GLRGBWaveformWidget : public QGLWidget, public WaveformWidgetAbstract {
+class GLRGBWaveformWidget : public GLWaveformWidgetAbstract {
Q_OBJECT
public:
GLRGBWaveformWidget(const QString& group, QWidget* parent);
diff --git a/src/waveform/widgets/glsimplewaveformwidget.cpp b/src/waveform/widgets/glsimplewaveformwidget.cpp
index c54482279e..a54cc5a76c 100644
--- a/src/waveform/widgets/glsimplewaveformwidget.cpp
+++ b/src/waveform/widgets/glsimplewaveformwidget.cpp
@@ -16,21 +16,17 @@
#include "waveform/sharedglcontext.h"
GLSimpleWaveformWidget::GLSimpleWaveformWidget(const QString& group, QWidget* parent)
- : QGLWidget(parent, SharedGLContext::getWidget()),
- WaveformWidgetAbstract(group) {
+ : GLWaveformWidgetAbstract(group, parent) {
qDebug() << "Created QGLWidget. Context"
<< "Valid:" << context()->isValid()
<< "Sharing:" << context()->isSharing();
- if (QGLContext::currentContext() != context()) {
- makeCurrent();
- }
addRenderer<WaveformRenderBackground>();
addRenderer<WaveformRendererEndOfTrack>();
addRenderer<WaveformRendererPreroll>();
addRenderer<WaveformRenderMarkRange>();
#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2)
- addRenderer<GLWaveformRendererSimpleSignal>();
+ m_pGlRenderer = addRenderer<GLWaveformRendererSimpleSignal>();
#endif // !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2)
addRenderer<WaveformRenderBeat>();
addRenderer<WaveformRenderMark>();
diff --git a/src/waveform/widgets/glsimplewaveformwidget.h b/src/waveform/widgets/glsimplewaveformwidget.h
index 1aacfaed80..16ed62aacc 100644
--- a/src/waveform/widgets/glsimplewaveformwidget.h
+++ b/src/waveform/widgets/glsimplewaveformwidget.h
@@ -4,7 +4,7 @@
#include "waveformwidgetabstract.h"
-class GLSimpleWaveformWidget : public QGLWidget, public WaveformWidgetAbstract {
+class GLSimpleWaveformWidget : public GLWaveformWidgetAbstract {
Q_OBJECT
public:
GLSimpleWaveformWidget(const QString& group, QWidget* parent);
diff --git a/src/waveform/widgets/glslwaveformwidget.cpp b/src/waveform/widgets/glslwaveformwidget.cpp
index a45e0a715b..faa22df84c 100644
--- a/src/waveform/widgets/glslwaveformwidget.cpp
+++ b/src/waveform/widgets/glslwaveformwidget.cpp
@@ -31,8 +31,7 @@ GLSLWaveformWidget::GLSLWaveformWidget(
const QString& group,
QWidget* parent,
bool rgbRenderer)
- : QGLWidget(parent, SharedGLContext::getWidget()),
- WaveformWidgetAbstract(group) {
+ : GLWaveformWidgetAbstract(group, parent) {
qDebug() << "Created QGLWidget. Context"
<< "Valid:" << context()->isValid()
<< "Sharing:" << context()->isSharing();
@@ -46,9 +45,9 @@ GLSLWaveformWidget::GLSLWaveformWidget(
addRenderer<WaveformRenderMarkRange>();
#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2)
if (rgbRenderer) {
- m_signalRenderer = addRenderer<GLSLWaveformRendererRGBSignal>();
+ m_pGlRenderer = addRenderer<GLSLWaveformRendererRGBSignal>();
} else {
- m_signalRenderer = addRenderer<GLSLWaveformRendererFilteredSignal>();
+ m_pGlRenderer = addRenderer<GLSLWaveformRendererFilteredSignal>();
}
#else
Q_UNUSED(rgbRenderer);
diff --git a/src/waveform/widgets/glslwaveformwidget.h b/src/waveform/widgets/glslwaveformwidget.h
index 85baf50dcd..229bbc2fca 100644
--- a/src/waveform/widgets/glslwaveformwidget.h
+++ b/src/waveform/widgets/glslwaveformwidget.h
@@ -6,7 +6,7 @@
class GLSLWaveformRendererSignal;
-class GLSLWaveformWidget : public QGLWidget, public WaveformWidgetAbstract {
+class GLSLWaveformWidget : public GLWaveformWidgetAbstract {
Q_OBJECT
public:
GLSLWaveformWidget(
diff --git a/src/waveform/widgets/glwaveformwidget.cpp b/src/waveform/widgets/glwaveformwidget.cpp
index 4b43658fd1..03e4849174 100644
--- a/src/waveform/widgets/glwaveformwidget.cpp
+++ b/src/waveform/widgets/glwaveformwidget.cpp
@@ -18,21 +18,17 @@
#include "waveform/sharedglcontext.h"
GLWaveformWidget::GLWaveformWidget(const QString& group, QWidget* parent)
- : QGLWidget(parent, SharedGLContext::getWidget()),
- WaveformWidgetAbstract(group) {
+ : GLWaveformWidgetAbstract(group, parent) {
qDebug() << "Created QGLWidget. Context"
<< "Valid:" << context()->isValid()
<< "Sharing:" << context()->isSharing();
- if (QGLContext::currentContext() != context()) {
- makeCurrent();
- }
addRenderer<WaveformRenderBackground>();
addRenderer<WaveformRendererEndOfTrack>();
addRenderer<WaveformRendererPreroll>();
addRenderer<WaveformRenderMarkRange>();
#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2)
- addRenderer<GLWaveformRendererFilteredSignal>();
+ m_pGlRenderer = addRenderer<GLWaveformRendererFilteredSignal>();
#endif // !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2)
addRenderer<WaveformRenderBeat>();
addRenderer<WaveformRenderMark>();
diff --git a/src/waveform/widgets/glwaveformwidget.h b/src/waveform/widgets/glwaveformwidget.h
index fa27180e67..9073523ba6 100644
--- a/src/waveform/widgets/glwaveformwidget.h
+++ b/src/waveform/widgets/glwaveformwidget.h
@@ -4,7 +4,7 @@
#include "waveformwidgetabstract.h"
-class GLWaveformWidget : public QGLWidget, public WaveformWidgetAbstract {
+class GLWaveformWidget : public GLWaveformWidgetAbstract {
Q_OBJECT
public:
GLWaveformWidget(const QString& group, QWidget* parent);
diff --git a/src/waveform/widgets/qtrgbwaveformwidget.cpp b/src/waveform/widgets/qtrgbwaveformwidget.cpp
index 7a388ad813..f0ba3b0c36 100644
--- a/src/waveform/widgets/qtrgbwaveformwidget.cpp
+++ b/src/waveform/widgets/qtrgbwaveformwidget.cpp
@@ -21,9 +21,6 @@ QtRGBWaveformWidget::QtRGBWaveformWidget(const QString& group, QWidget* parent)
qDebug() << "Created QGLWidget. Context"
<< "Valid:" << context()->isValid()
<< "Sharing:" << context()->isSharing();
- if (QGLContext::currentContext() != context()) {
- makeCurrent();
- }
addRenderer<WaveformRenderBackground>();
addRenderer<WaveformRendererEndOfTrack>();
diff --git a/src/waveform/widgets/qtsimplewaveformwidget.cpp b/src/waveform/widgets/qtsimplewaveformwidget.cpp
index 4978a6b848..866d37c308 100644
--- a/src/waveform/widgets/qtsimplewaveformwidget.cpp
+++ b/src/waveform/widgets/qtsimplewaveformwidget.cpp
@@ -23,9 +23,6 @@ QtSimpleWaveformWidget::QtSimpleWaveformWidget(
qDebug() << "Created QGLWidget. Context"
<< "Valid:" << context()->isValid()
<< "Sharing:" << context()->isSharing();
- if (QGLContext::currentContext() != context()) {
- makeCurrent();
- }
addRenderer<WaveformRenderBackground>();
addRenderer<WaveformRendererEndOfTrack>();
diff --git a/src/waveform/widgets/qtvsynctestwidget.cpp b/src/waveform/widgets/qtvsynctestwidget.cpp
index c651d3655d..32f151af96 100644
--- a/src/waveform/widgets/qtvsynctestwidget.cpp
+++ b/src/waveform/widgets/qtvsynctestwidget.cpp
@@ -22,9 +22,6 @@ QtVSyncTestWidget::QtVSyncTestWidget(const QString& group, QWidget* parent)
qDebug() << "Created QGLWidget. Context"
<< "Valid:" << context()->isValid()
<< "Sharing:" << context()->isSharing();
- if (QGLContext::currentContext() != context()) {
- makeCurrent();
- }
addRenderer<QtVSyncTestRenderer>();
diff --git a/src/waveform/widgets/qtwaveformwidget.cpp b/src/waveform/widgets/qtwaveformwidget.cpp
index 904e03cc09..8cf493517e 100644
--- a/src/waveform/widgets/qtwaveformwidget.cpp
+++ b/src/waveform/widgets/qtwaveformwidget.cpp
@@ -22,9 +22,6 @@ QtWaveformWidget::QtWaveformWidget(const QString& group, QWidget* parent)
qDebug() << "Created QGLWidget. Context"
<< "Valid:" << context()->isValid()
<< "Sharing:" << context()->isSharing();
- if (QGLContext::currentContext() != context()) {
- makeCurrent();
- }
addRenderer<WaveformRenderBackground>();
addRenderer<WaveformRendererEndOfTrack>();
diff --git a/src/waveform/widgets/waveformwidgetabstract.cpp b/src/waveform/widgets/waveformwidgetabstract.cpp
index 7dc1d995e0..bec1e190a3 100644
--- a/src/waveform/widgets/waveformwidgetabstract.cpp
+++ b/src/waveform/widgets/waveformwidgetabstract.cpp
@@ -1,9 +1,11 @@
#include "waveformwidgetabstract.h"
-#include "waveform/renderers/waveformwidgetrenderer.h"
-#include "util/compatibility.h"
-#include <QtDebug>
#include <QWidget>
+#include <QtDebug>
+
+#include "util/compatibility.h"
+#include "waveform/renderers/waveformwidgetrenderer.h"
+#include "waveform/sharedglcontext.h"
WaveformWidgetAbstract::WaveformWidgetAbstract(const QString& group)
: WaveformWidgetRenderer(group),
@@ -46,3 +48,8 @@ void WaveformWidgetAbstract::resize(int width, int height) {
}
WaveformWidgetRenderer::resize(width, height, static_cast<float>(devicePixelRatio));
}
+
+GLWaveformWidgetAbstract::GLWaveformWidgetAbstract(const QString& group, QWidget* parent)
+ : WaveformWidgetAbstract(group),
+ QGLWidget(parent, SharedGLContext::getWidget()) {
+}
diff --git a/src/waveform/widgets/waveformwidgetabstract.h b/src/waveform/widgets/waveformwidgetabstract.h
index 3b975c7189..d5b6ce23f3 100644
--- a/