diff options
author | Be <be@mixxx.org> | 2020-12-10 17:13:17 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-10 17:13:17 -0600 |
commit | 02c0c417241750d1ba904b043059568965c915ec (patch) | |
tree | ec0f195f65ab909a51d444d4e89de22b471180bc /src | |
parent | 3b96557a796c416adb0e78114b3e22c17bd51ee8 (diff) | |
parent | f26b7fcc07f47ae1f349f4cd2c39418675c67eee (diff) |
Merge pull request #3407 from Be-ing/opengl_initialization_fix
fix initialization of QGLWidget waveform widgets & renderers
Diffstat (limited to 'src')
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()) { +} |